Android退出應用的四種方式

注:轉(zhuǎn)載自 soul_code

一膜赃、容器式

建立一個全局容器豌注,把所有的Activity存儲起來伤塌,退出時循環(huán)遍歷finish所有Activity

1.新建BaseActivity作為所有活動的基類,并重寫onCreate()方法轧铁,將所有活動添加到容器棧中

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 添加Activity到堆棧
        AtyContainer.getInstance().addActivity(this);
}

2.重寫onDestroy()方法每聪,結(jié)束活動時,將活動從容器棧中移除

protected void onDestroy() {
        super.onDestroy();
        // 結(jié)束Activity&從棧中移除該Activity
        AtyContainer.getInstance().removeActivity(this);
}

3.容器棧代碼:

class AtyContainer {

    private AtyContainer() {
    }

    private static AtyContainer instance = new AtyContainer();
    private static List<Activity> activityStack = new ArrayList<Activity>();

    public static AtyContainer getInstance() {
        return instance;
    }

    public void addActivity(Activity aty) {
        activityStack.add(aty);
    }

    public void removeActivity(Activity aty) {
        activityStack.remove(aty);
    }
    /**
     * 結(jié)束所有Activity
     */
    public void finishAllActivity() {
        for (int i = 0, size = activityStack.size(); i < size; i++) {
            if (null != activityStack.get(i)) {
                activityStack.get(i).finish();
            }
        }
        activityStack.clear();
    }

}

二齿风、廣播式

通過在BaseActivity中注冊一個廣播药薯,當退出時發(fā)送一個廣播,finish退出

public class BaseActivity extends Activity {

    private static final String EXITACTION = "action.exit";

    private ExitReceiver exitReceiver = new ExitReceiver();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        IntentFilter filter = new IntentFilter();
        filter.addAction(EXITACTION);
        registerReceiver(exitReceiver, filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(exitReceiver);
    }

    class ExitReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            BaseActivity.this.finish();
        }

    }

}

三救斑、進程式

通過直接殺死當前應用的進程來結(jié)束應用童本,簡單粗暴,而且有(wu)效脸候!

android.os.Process.killProcess(android.os.Process.myPid()); 
System.exit(0);
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);  
manager.killBackgroundProcesses(getPackageName());

這三種都能達到同樣的效果穷娱,但是在模擬器上都會彈出 Unfortunately , XXX has stopped 消息提示框绑蔫,但確實能退出應用。部分真機直接失效泵额,只能finish當前Activity(比如我手上這臺小米note配深,國產(chǎn)的幾款ROM fw層改動太多,使用這種方式需慎重) 嫁盲。

四篓叶、 RS優(yōu)雅式

什么是RS式呢?即Receiver+singleTask 羞秤。

我們知道Activity有四種加載模式缸托,而singleTask就是其中的一種,使用這個模式之后瘾蛋,當startActivity時嗦董,它先會在當前棧中查詢是否存在Activity的實例,如果存在瘦黑,則將其至于棧頂,并將其之上的所有Activity移除棧奇唤。我們打開一個app幸斥,首先是一個splash頁面,然后會finish掉splash頁面咬扇。跳轉(zhuǎn)到主頁甲葬。然后會在主頁進行N次的跳轉(zhuǎn),期間會產(chǎn)生數(shù)量不定的Activity懈贺,有的被銷毀经窖,有的駐留在棧中,但是棧底永遠是我們的HomeActivity梭灿。這樣就讓問題變得簡單很多了画侣。我們只需兩步操作即可優(yōu)雅的實現(xiàn)app的退出。

  1. 在HomeActivity注冊一個退出廣播堡妒,和第二個廣播式一樣配乱,但是這里只需要在HomeActivity一個頁面注冊即可。
  2. 設置HomeActivity的啟動模式為singleTask皮迟。

當我們需要退出的時候只需要startActivity(this,HomeActivity,class)搬泥, 再發(fā)送一個退出廣播。上面代碼首先會把棧中HomeActivity之上的所有Activity移除出棧伏尼,然后接到廣播finish自己忿檩。一切OK ! 沒有彈框,不用考慮機型Rom適配爆阶。不會有內(nèi)存問題燥透,就是那么的優(yōu)雅沙咏,簡單!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兽掰,一起剝皮案震驚了整個濱河市芭碍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孽尽,老刑警劉巖窖壕,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異杉女,居然都是意外死亡瞻讽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門熏挎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來速勇,“玉大人,你說我怎么就攤上這事坎拐》炒牛” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵哼勇,是天一觀的道長都伪。 經(jīng)常有香客問我,道長积担,這世上最難降的妖魔是什么陨晶? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮帝璧,結(jié)果婚禮上先誉,老公的妹妹穿的比我還像新娘。我一直安慰自己的烁,他們只是感情好褐耳,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撮躁,像睡著了一般漱病。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上把曼,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天杨帽,我揣著相機與錄音,去河邊找鬼嗤军。 笑死注盈,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的叙赚。 我是一名探鬼主播老客,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼僚饭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胧砰?” 一聲冷哼從身側(cè)響起鳍鸵,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尉间,沒想到半個月后偿乖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡哲嘲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年贪薪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眠副。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡画切,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出囱怕,到底是詐尸還是另有隱情霍弹,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布娃弓,位于F島的核電站庞萍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏忘闻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一恋博、第九天 我趴在偏房一處隱蔽的房頂上張望齐佳。 院中可真熱鬧,春花似錦债沮、人聲如沸炼吴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硅蹦。三九已至,卻和暖如春闷煤,著一層夾襖步出監(jiān)牢的瞬間童芹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工鲤拿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留假褪,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓近顷,卻偏偏與公主長得像生音,于是被迫代替她去往敵國和親宁否。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容