Android退出所有Activity最優雅的方式

jopen 8年前發布 | 17K 次閱讀 Activity Android開發 移動開發

關于退出所有Activity,目前網上比較流行的方式大概有以下幾種:

① 使用ActivityManager的方式;

② 自定義一個Activity集合類的方式;

③ 通過發送廣播的方式;

④ 通過殺死當前應用進程的方式;

以上方式的具體實現大家可自行谷歌百度,此處不再贅述。

但是這些方式要么不太靠譜,要么有限制,要么不夠優雅。今天我們就來說一個簡單有效,優雅大方的方式來退出所有的Activity。

原理

先來說一下原理。我們知道,Activity有四種啟動模式,分別為:standard(默認模式)、singleTop、singleTask、singleInstance。本方式需要使用的就是singleTask啟動模式。

如果設置一個Activity的啟動模式為singleTask,那么每次啟動此Activity時系統都會檢查當前任務棧中是否已經存在此Activity的實例。如果已經存在,則不再創建此Activity新的實例,而是調用已存在的Activity的onNewIntent()方法,并把intent作為此方法的參數傳遞給它。然后它就會被置于棧頂,并把它之前的所有的Activity移除掉。

原理實現

(我們先將進入應用的第一個Activity稱為BaseActivity)。明白了基本原理之后就好辦了,先將BaseActivity的啟動模式設置為singleTask,并重寫此Activity的onNewIntent()方法用來結束自己,之后會在此Activity上進入其他Activity進行數量不定的跳轉。在需要退出時只需在當前Activity上調用startActivity(this,BaseActivity.class)會首先將除BaseActivity外的所有Activity結束掉,然后會自動調用BaseActivity的onNewIntent()結束掉自己,這樣所有Activity都完美的退出了。

圖解實現

為了便于理解,使用下圖演示此方式的具體實現過程。

代碼實現

第一步:設置BaseActivity的啟動模式為singleTask

android:launchMode="singleTask"

第二步:重寫BaseActivity的onNewIntent()方法

//聲明一個靜態常量,用作退出BaseActivity的Tag
public static final String EXIST = "exist";
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if (intent != null) {//判斷其他Activity啟動本Activity時傳遞來的intent是否為空
        //獲取intent中對應Tag的布爾值
        boolean isExist = intent.getBooleanExtra(EXIST, false);
        //如果為真則退出本Activity
        if (isExist) {
            this.finish();
        }
    }
}

第三步:在需要退出應用的Activity中啟動BaseActivity

Intent intent = new Intent(this,BaseActivity.class);
//傳遞退出所有Activity的Tag對應的布爾值為true
intent.putExtra(BaseActivity.EXIST, true);
//啟動BaseActivity
startActivity(intent);

來自: http://www.cnblogs.com/caobotao/p/5127645.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!