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

文章出處: http://www.cnblogs.com/caobotao/p/5127645.html


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