[Android]關閉所有Activity 然後打開某個Activity

關閉所有Activity 然後打開某個Activity

需求

在某個頁面或某個消息監聽或某個網絡請求後,關閉所有activity,並跳轉至某個Activity

應用場景

登陸過期,token過期,賬戶被擠佔下線

實現思路

  1. 在Application中存儲所有Activity,並實現一個方法可以關閉所有Activity,再打開某個Activity

    可以用lifesysle優化存儲方式,但仍很麻煩

  2. 利用Activity的啓動模式,將啓動activity設置爲singleTask,需要銷燬所有Activity時,就可以跳轉至該Activity,然後在onNewIntent中接受參數,以此跳轉新頁面
    需要較大的改動量,且需要app的所有Activity都在一個棧內

  3. 利用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);
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章