問(wèn)題現(xiàn)象:第一次安裝應(yīng)用,不要用adb安裝,而是要用系統(tǒng)的安裝器去安裝,安裝完成后,直接點(diǎn)擊打開,不要點(diǎn)擊完成,進(jìn)入應(yīng)用,隨便點(diǎn)開其他界面,點(diǎn)擊home鍵讓應(yīng)用進(jìn)入后臺(tái),然后再點(diǎn)擊應(yīng)用的圖標(biāo)進(jìn)入應(yīng)用,這是應(yīng)用會(huì)重新回到入口界面,實(shí)際上應(yīng)用已經(jīng)重啟了。
重新殺掉應(yīng)用,以后再每次打開應(yīng)用都不會(huì)再有這個(gè)問(wèn)題,只有第一次有,并且系統(tǒng)的安裝器安裝完成后,要直接點(diǎn)擊打開才能復(fù)現(xiàn),另外這個(gè)問(wèn)題不是所有的手機(jī)都能復(fù)現(xiàn)的,
之前做項(xiàng)目的時(shí)候就遇到過(guò),現(xiàn)在做新項(xiàng)目的時(shí)候有被測(cè)試人員發(fā)現(xiàn)了,尷尬啊,不能再在同一個(gè)問(wèn)題上跌倒3次,以后新建項(xiàng)目一定要加上預(yù)防措施,現(xiàn)記錄解決方法:
問(wèn)題原因:
利用系統(tǒng)安裝器打開程序,有些廠商在啟動(dòng)的Intent是沒(méi)有帶Category,
而我們自己打開程序是帶了Category,所以只需要在配置了Intent.ACTION_MAIN的Activity的
onCreate()方法中的添加下面代碼即可。放在super.onCreate(savedInstanceState)方法后。
if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0){
finish();
return;
}
或者
if (!isTaskRoot()) {
Intent intent = getIntent();
String action = intent.getAction();
if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {
finish();
return;
}
}
另外,需要注意兩點(diǎn),一是、如果上面的Activity中實(shí)現(xiàn)了finish() 和 onDestroy() 方法,一定要保證這兩個(gè)方法中不會(huì)有對(duì)空對(duì)象的操作以及注銷未注冊(cè)的廣播等類似操作,因?yàn)榈诙未蜷_應(yīng)用時(shí),程序會(huì)調(diào)用finish()方法,及觸發(fā)onDestroy()方法,而這兩個(gè)函數(shù)里面的對(duì)象變量都還未進(jìn)行初始化等操作。二是、finish() 和 onDestroy() 方法中不能有System.exit(0);否則第二次打開應(yīng)用殺掉進(jìn)程時(shí)也會(huì)將第一次打開的應(yīng)用殺掉。
轉(zhuǎn)自:http://www.echojb.com/mobile-application/2017/06/10/422423.html