问题描述:

1、从Android应用市场下载并安装应用,安装完成后,当前界面下方会出现“打开”按钮,这时候我们点击“打开”,会启动应用,进入到应用的启动页面,然后进入应用的主界面,这个时候我们什么也不做,按Home键返回到桌面,找到应用图标所在区域,点击应用图标,此时我们所期待的现象是重新回到之前我们打开的页面,对吗?然后这个时候你点击桌面上的应用图标打开应用,这个时候你会惊奇的发现应用重新启动了。按返回键你退出应用一次,然后又回到了之前启动的应用页面了。

2、另外,在部分第三方桌面启动app的时候也会有这种情况出现,我测试的时候使用的“米粒桌面“,在全部应用页打开应用,按Home键切到米粒桌面,在米粒桌面的最近使用中打开,会跟上面的结果一样,应用被重启了!

问题重现:

通过上面现象描述,大家应该看懂了问题,可以通过一个具体的实现来重现一下这个问题,首先我安装米粒桌面(非广告,只是我用习惯了,第三方应用市场也是可以),然后安装“哄你”app(也可以尝试其他的app),安装完成后,在米粒桌面的全部应用页面中启动 “哄你”APP,然后按home键切换到米粒桌面的首页,找到最近使用的app列表,打开“哄你”APP,这个时候发现应用会重启,并且退出的时候退出两次才会回到桌面,那么我们来分析一下这是为什么呢?当然,哄你这款软件并不会,因为我做过处理了,所以如果你们想试验的,可以随便挑一款其他APP来测试。

下面是我的调试打印信息:

1、首先从全部应用页面启动哄你APP:

可以看到启动页的Intent信息:

Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.kk.sleep/.splash.ui.EntryActivity bnds=[275,1336][545,1606] }

2、按Home键回到桌面,从最近应用中打开哄你APP:

可以看到启动页的OnCrate()再次被调用了! Intent的信息:

Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000 pkg=com.kk.sleep cmp=com.kk.sleep/.splash.ui.EntryActivity }

从上面的调试Log中可以看到两次启动的Intent中的Flag不一致!

解决方案:

在启动的Activity的OnCreate方法中加入:

if(!this.isTaskRoot()) {

Log.d(TAG+"_entry","avoid the enrtyActivity re-created");

Intent intent = getIntent();

if(intent !=null) {

String action = intent.getAction();

if(intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {

finish();

return;

}

}

}else{

setContentView(R.layout.activity_entry);

init();

}

if(!isTaskRoot()),判断该Activity是不是任务空间的源Activity,如果返回Flase,就是说是被系统重新实例化出来,如果这个Activity是你的Lanucher Activity,这里可以直接Finish关闭页面了。

需要的注意是:

1、如果上面的Activity中实现了finish() 和 onDestroy() 方法,一定要保证这两个方法中不会有对空对象的操作以及注销未注册的广播等类似操作,因为第二次打开应用时,Oncreate()中还没初始化的时候,就会调用finish()方法,及直接触发onDestroy()方法,而这两个函数里面的对象变量都还未进行初始化等操作。

2、finish() 和 onDestroy() 方法中不能有System.exit(0);否则第二次打开应用杀掉进程时也会将第一次打开的应用杀掉。

解决问题的办法很简单,一行代码就搞定,但如果不细心,就难以发现这类烦人的问题。如果大家有什么疑问可以留言,欢迎大家一起交流。

Android安装两次才成功,Android应用从市场安装完成打开与桌面打开,被启动两次的问题...相关推荐

  1. android 判断webview加载成功,Android:如何检查使用webview.loadUrl时url的成功加载

    不幸的是,目前在WebView中没有简单的方法来确保页面上的所有内容都已成功加载.我们希望在未来的版本中提供更好的API.让我解释一下你现在可以做什么. 首先,为了检测阻止WebView连接服务器加载 ...

  2. android 不能安装app,android中两个不同名称的app不能同时安装

    ---恢复内容开始--- 两个app,第一个安装后,再安装第二个,会提示安装包损坏或者一切其他问题,但是这个安装包在别的手机可以正常安装,可以是因为以下问题 两个app中,包含有相同名称的provid ...

  3. android x86双显卡,centos7笔记本双显卡安装nvidia驱动并成功安装cuda

    原标题:centos7笔记本双显卡安装nvidia驱动并成功安装cuda 这是一篇介绍如何在笔记本上使用centos 7 系统安装nvidia驱动和cuda 的文章. 本篇还会介绍清晰的安装思路. 探 ...

  4. android判断是否已经安装成功,android 判断应用程序是否已安装

    1.判断是否安装 /* * check the app is installed */ private boolean isAppInstalled(Context context,String pa ...

  5. android apk 安装目录成功,记录一次解决安装 Apk 兼容性问题

    原标题:记录一次解决安装 Apk 兼容性问题 问题描述现象 代码执行安装Apk,出现系统弹框解析错误,解析包时出现错误 场景 在华为P20 Android 8.0 手机上,下载Apk并使用通知栏进度条 ...

  6. Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)

    鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio  Android Studio 是一个Android开发环境,基于Intel ...

  7. 手把手教你如何电脑安装android,怎么在电脑上玩android游戏?安卓模拟器怎么安装?...

    大家都知道,android游戏有很多是很好玩的,那大家知道怎么在电脑上玩android游戏吗?其实只要安装一个安卓模拟器就可以了.可是又有很多网友反映安卓模拟器不会安装,因为步骤比较多的问题,所以安装 ...

  8. 【Android开发】Android入门安装与使用教程——以Android Studio3.6.1为例

    [Android开发]Android入门教程--以Android Studio3.6.1为例 1.为什么要学习Android 2.学习资源 3.安装Android Studio 3.1 下载安装包 3 ...

  9. android 日倒计时计算器,Days Matter倒数日app下载安装

    Days Matter倒数日app下载安装介绍 「倒数日 · Days Matter」是一个帮你记录生活中重要日子的小工具,例如:恋人生日还有多少天?还信用卡还有多少天?发工资还有多少天?宝宝出生已经 ...

最新文章

  1. PHP设计模式-单例模式
  2. 测试CPU品牌和当前工作频率
  3. html网页语言是什么,HTML是什么?
  4. 浅谈MES与SAP PP模块的集成应用
  5. 高斯判别分析(GDA)和朴素贝叶斯(NB)
  6. 【Python入门】Python之shutil模块11个常用函数详解
  7. Unhandled promise rejection Error: errCode: -501007 invalid parameters | errMsg: Invalid Key Name: _
  8. C语言高级编程:i++ 或 ++i作为函数参数
  9. 2021年重庆高考成绩排名查询,2021年重庆理科高考成绩排名一分一段表,重庆高考理科成绩排名查询...
  10. sklearn使用小记GridSearchCV
  11. 数据结构c语言版算法知识点,2020考研计算机《数据结构(C语言版)》复习笔记(3)...
  12. Java内存模型与共享变量可见性
  13. TCS2010(中国标准编写模板)安装教程+解决三级标题条无法设置
  14. 小甲鱼c语言入门冒泡,小甲鱼 排序算法 冒泡排序
  15. 安平仓管王 5000xp v2.9 免费下载
  16. Redis 下载安装
  17. Android 拦截音量键并屏蔽系统的音量调节
  18. Ubuntu用C/C++在终端打印不同颜色的字体
  19. Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类
  20. Opencv开发笔记(三):使用形态学滤波对图像进行边缘及角点检测

热门文章

  1. streaming接mysql数据库_[Spark streaming举例]-- 实时统计并且存储到mysql数据库中
  2. C语言和C++的区别整理详解!
  3. python全排列问题_Python基于回溯法子集树模板解决全排列问题示例
  4. requestfacade 这个是什么类?_Java 的大 Class 到底是什么?
  5. python怎样安装模块_python中如何安装模块
  6. JDK源码解析之 Java.lang.Package
  7. Real提示“作为受限用户,您无足够的windows操作权限”的解决办法
  8. Albert launcher安装与使用
  9. Linux下查看显卡PCIE速率x16x8x4及设定
  10. 简单类及成员实例【C#】