您的位置:首页 > 移动开发

【Android】解决安装完 APK 后点打开然后回到桌面再点图标打开 APP 出现 activity 重建的问题

2017-03-23 14:21 691 查看
其实这个问题是在某开发群里聊天的时候有人提出来的,然后试了试自己负责的项目,结果确实是有这个问题,下面就来说说这个问题。

首先先说清楚重现过程:

在安装新 APK 或者升级已安装 APP 后将会出现安装完成的页面,该页面其中会提供两个按钮,一个是“完成”,另一个是“打开”。其中如果选了“完成”,那什么事都不会发生,但如果选了“打开”,就会打开 APP ,这时候按 HOME 键回到桌面,再点击 APP 图标进行打开,你会发现 APP 直接走的是重建流程,而不是打开之前处于后台的 activity,并且只要不清理后台程序或者彻底关闭 APP,就会一直这样。

接着去看了别人家的 APP ,像微博、QQ 也有这种问题。找到的资料有说是属于 Android 系统机制问题,可以不做处理。

But... 真不幸,被 PM 发现了这个问题(太变 Tai 了),要解决,只好开始着手了。

其实解决方法很简单:

方法一:

将 APP 启动的第一个 activity 的启动模式改为 singleTop:

android:launchMode="singleTop"

方法二:
在 APP 启动的第一个 activity 中加入如下代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 解决APK安装后点打开按钮,打开程序后按home键后再通过APP图标唤醒会重新调用oncreate的问题
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
setContentView(R.layout.activity_main);
}

PS:注意得在 setContentView 之前。
当然到这里还没完,上面的解决方法只有当 APP 启动的第一个 activity 的启动模式不为 singleTask 才有效,那么问题来了,如果项目需要启动的第一个 activity 的启动模式为 singleTask 那该怎么办呢?

其实这真的很无奈,但也有解决方法,那就是把 APP 启动的第一个 activity 改为空 activity(当然得加上上面两种解决方法之一的处理),然后马上跳转你原来第一个要启动的activity(该 activity 保留 singleTask 的启动模式)。

但当你原来第一个要启动的 activity 要处理一些其它的事情而必须把它放到第一个启动的话那就不适用了,那么就只能选择无视这个问题了。

(当然你也可以怂恿设计或 PM 给加个启动图页面,这样就可以直接通过上面的两个方法简单解决问题,当然这可能会带来其它的坑,比如启动图会变化、有动画....,所以,慎用,哈哈哈~)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐