關閉所有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);
}
}
```,複製程式碼