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

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

首先先说清楚重现过程:

在安装新 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 给加个启动图页面,这样就可以直接通过上面的两个方法简单解决问题,当然这可能会带来其它的坑,比如启动图会变化、有动画....,所以,慎用,哈哈哈~)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值