關閉所有Activity 然後打開某個Activity
需求
在某個頁面或某個消息監聽或某個網絡請求後,關閉所有activity,並跳轉至某個Activity
應用場景
登陸過期,token過期,賬戶被擠佔下線
實現思路
在Application中存儲所有Activity,並實現一個方法可以關閉所有Activity,再打開某個Activity
可以用lifesysle優化存儲方式,但仍很麻煩
利用Activity的啓動模式,將啓動activity設置爲singleTask,需要銷燬所有Activity時,就可以跳轉至該Activity,然後在onNewIntent中接受參數,以此跳轉新頁面
需要較大的改動量,且需要app的所有Activity都在一個棧內利用Activiy啓動flag,Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK,新Activity將成爲一個空棧中的新的最底端activity,且舊Activity都會被finish掉
工作量較小,實現簡單
代碼
下面是Application中的代碼,可在app某處獲取Application實例然後調用
private volatile long lastJump = 0;
public void loginAgain(String message){
if(System.currentTimeMillis() - lastJump > 2000) {
lastJump = System.currentTimeMillis();
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
Bundle bundle = new Bundle();
bundle.putBoolean(Constant.INTENT_LOGIN_AGAIN,true);
bundle.putString(Constant.INTENT_LOGIN_MESSAGE,message);
intent.putExtras(bundle);
startActivity(intent);
}
}