昆明网站建设工作室,科技创新与应用,论坛建立网站,wordpress 禁止收录问题描述#xff1a;1、从Android应用市场下载并安装应用#xff0c;安装完成后#xff0c;当前界面下方会出现“打开”按钮#xff0c;这时候我们点击“打开”#xff0c;会启动应用#xff0c;进入到应用的启动页面#xff0c;然后进入应用的主界面#xff0c;这个时…问题描述1、从Android应用市场下载并安装应用安装完成后当前界面下方会出现“打开”按钮这时候我们点击“打开”会启动应用进入到应用的启动页面然后进入应用的主界面这个时候我们什么也不做按Home键返回到桌面找到应用图标所在区域点击应用图标此时我们所期待的现象是重新回到之前我们打开的页面对吗然后这个时候你点击桌面上的应用图标打开应用这个时候你会惊奇的发现应用重新启动了。按返回键你退出应用一次然后又回到了之前启动的应用页面了。2、另外在部分第三方桌面启动app的时候也会有这种情况出现我测试的时候使用的“米粒桌面“在全部应用页打开应用按Home键切到米粒桌面在米粒桌面的最近使用中打开会跟上面的结果一样应用被重启了问题重现通过上面现象描述大家应该看懂了问题可以通过一个具体的实现来重现一下这个问题首先我安装米粒桌面(非广告只是我用习惯了第三方应用市场也是可以)然后安装“哄你”app(也可以尝试其他的app)安装完成后在米粒桌面的全部应用页面中启动 “哄你”APP然后按home键切换到米粒桌面的首页找到最近使用的app列表打开“哄你”APP这个时候发现应用会重启并且退出的时候退出两次才会回到桌面那么我们来分析一下这是为什么呢当然哄你这款软件并不会因为我做过处理了所以如果你们想试验的可以随便挑一款其他APP来测试。下面是我的调试打印信息1、首先从全部应用页面启动哄你APP可以看到启动页的Intent信息Intent { actandroid.intent.action.MAIN cat[android.intent.category.LAUNCHER] flg0x10200000 cmpcom.kk.sleep/.splash.ui.EntryActivity bnds[275,1336][545,1606] }2、按Home键回到桌面从最近应用中打开哄你APP可以看到启动页的OnCrate()再次被调用了 Intent的信息:Intent { actandroid.intent.action.MAIN cat[android.intent.category.LAUNCHER] flg0x10600000 pkgcom.kk.sleep cmpcom.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);否则第二次打开应用杀掉进程时也会将第一次打开的应用杀掉。解决问题的办法很简单一行代码就搞定但如果不细心就难以发现这类烦人的问题。如果大家有什么疑问可以留言欢迎大家一起交流。