《Android之 部分系統(tǒng)安裝器bug導(dǎo)致應(yīng)用重啟解決方法》
轉(zhuǎn)載請(qǐng)注明來(lái)自 傻小孩b_移動(dòng)開發(fā)(http://www.reibang.com/users/d388bcf9c4d3)喜歡的可以關(guān)注我,不定期總結(jié)文章!您的支持是我的動(dòng)力哈扳碍!
當(dāng)?shù)谝淮螒?yīng)用安裝的時(shí)候泼掠,選擇打開的時(shí)候黔宛,當(dāng)我們進(jìn)入應(yīng)用后送朱,按住Home鍵切回桌面表谊,然后才重新進(jìn)入應(yīng)用刮刑,會(huì)發(fā)現(xiàn)應(yīng)用會(huì)重新啟動(dòng)喉祭。
初次判斷是部分手機(jī)系統(tǒng)安裝器的bug,即使我們?cè)贏ndroidManifest的配置設(shè)置了啟動(dòng)頁(yè)模式雷绢,如下:
<activity
android:name=".ui.splashActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/myTheme"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
但是通過(guò)安裝器完成安裝后泛烙,點(diǎn)擊“打開”后啟動(dòng)的應(yīng)用,啟動(dòng)頁(yè)Activity不會(huì)持有AndroidManifest配置的action和category翘紊。目前還找不到比較權(quán)威性的解釋蔽氨。
目前解決方法
解決方法思路很簡(jiǎn)單:首先在首次啟動(dòng)的activity(設(shè)置action時(shí)MAIN的activity),在創(chuàng)建前(oncreate())先判斷當(dāng)前的activity帆疟,intent是否持有配置的action和category鹉究,沒有的話就finish后在startActivity同個(gè)activity實(shí)例出來(lái)。如下代碼:
@Override
protected void onCreate(Bundle savedInstanceState) {
//FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 可以表示是否從桌面進(jìn)來(lái)
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) == 0) {
// 如果沒有檢測(cè)到配置的action和category踪宠, finsh -> start
finish();
Intent mIntent = new Intent(this, splashActivity.class);
mIntent.setAction(Intent.ACTION_MAIN);
mIntent.addCategory(Intent.CATEGORY_LAUNCHER);
mIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(mIntent);
}
super.onCreate(savedInstanceState);
}
目前這種方法可以解決自赔,如果有讀者大神知道什么原因?qū)е碌模瑲g迎聯(lián)系交流哈~
傻小孩b mark共勉柳琢,寫給在成長(zhǎng)路上奮斗的你