SingleTask与android.intent.action.MAIN的坑

版权声明:本文为博主原创文章,未经博主允许不得转载的哦=。= https://blog.csdn.net/qq_15602635/article/details/81665001

SingleTask与android.intent.action.MAIN的坑

项目首次封板内测期间用户反馈了一个问题,无论打开多少页面,将应用推至后台再启动就回到了主页。在内测期间才发现这么严重的问题,开发和测试都吓了一跳,庆幸这次内测只在公司范围内。

排查这个问题的时候,有点懵。项目是ReactNative架构的,原生为RN提供了清除Activity栈的方法,所以误以为是RN的错误调用导致了这个问题。断点调试发现没有走清栈的方法,一下失去了线索。对比了同类产品的代码没有发现异样,最终采用了二分commit记录的方式定位问题,然后发现了下面这段代码:

<activity
android:name=".MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

很普通的一段AndroidManifest配置,MainActivity配置android.intent.action.MAIN作为Launcher的入口,配置singleTaskr让MainActivity在栈中只有一个实例。

实际情况是,应用退出后台再次从launcher启动的时候会清除Activity栈,并且回调MainActivity的OnNewIntent()方法。

解决方法:
1、singleTask换成singleTop,如果需要清除栈,使用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

2、使用一个空的Activity配置android.intent.action.MAIN,启动后跳转MainActivity。

ps:这个问题最坑的地方是,你用关键词搜到相关文章的时候,你已经发现问题,解决问题。你没有发现问题原因的时候,你也搜不到文章。并且没有一篇深入分析App热启动的文章,所以正在的原因也未找到,本文也是如此。

参考:https://blog.csdn.net/ethanco/article/details/50128689

阅读更多
换一批

没有更多推荐了,返回首页