問題描述
? App的啟動(dòng)頁一般做法都是停留幾秒后自動(dòng)的關(guān)閉自己,跳轉(zhuǎn)的新的頁面。如果在App在啟動(dòng)頁停留時(shí)內(nèi)退到后臺(tái),如果此時(shí)啟動(dòng)頁自動(dòng)關(guān)閉且跳轉(zhuǎn)的新的頁面時(shí),從最近任務(wù)列表中啟動(dòng)App,程序會(huì)造成程序無法啟動(dòng)的問題。
問題分析
? 系統(tǒng)的近期任務(wù)列表保存的應(yīng)該是App最后一個(gè)顯示的Activity信息,當(dāng)最后一個(gè)顯示的Activity關(guān)閉時(shí),就會(huì)造成在近期任務(wù)列表中無法啟動(dòng)的問題
解決方法
簡(jiǎn)單的做法是,如果當(dāng)前App在后臺(tái),且需要關(guān)閉自己時(shí),設(shè)置一個(gè)標(biāo)志位,不執(zhí)行關(guān)閉的操作,返回到前臺(tái)時(shí)再執(zhí)行關(guān)閉操作。代碼如下
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class SplashActivity extends AppCompatActivity {
/**
* 用來標(biāo)識(shí)是否進(jìn)入后臺(tái)
*/
private boolean mIsOnPause;
/**
* 用來標(biāo)識(shí)是否需要關(guān)閉當(dāng)前頁面
*/
private boolean mIsFinish;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
}
@Override
protected void onRestart() {
super.onRestart();
//如果當(dāng)前是從后臺(tái)回到前臺(tái),且需要關(guān)閉當(dāng)前頁面時(shí),執(zhí)行關(guān)閉操作
//否則重置標(biāo)準(zhǔn)位
if (mIsOnPause && mIsFinish) {
mIsOnPause = false;
finish();
return;
}
mIsOnPause = false;
}
@Override
protected void onPause() {
super.onPause();
mIsOnPause = true;
}
@Override
public void finish() {
//如果當(dāng)前是不可交互狀態(tài),不關(guān)閉頁面,而是將關(guān)閉標(biāo)識(shí)位設(shè)置位true
if (!mIsOnPause) {
mIsFinish = false;
super.finish();
} else {
mIsFinish = true;
}
}
}
源碼探索
//todo