[Android]關閉所有Activity,開啟某個Activity

luckyAF發表於2018-03-14

關閉所有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);
        }
    }

```,複製程式碼

相關文章