當前位置:
首頁 > 最新 > Android 中幾種優雅的退出APP方式介紹

Android 中幾種優雅的退出APP方式介紹

我們的態度是:每天進步一點點,理想終會被實現。

前言

最近由於項目的修改,項目由MainActivity按返回鍵一次退出修改為MainActivity中連續按兩次返回鍵退出,順便優化一下推出這裡的代碼。因此還是在網上搜索了一番,總結比較之後得出了有以下集中方式,優缺點都會提出來,有需要的老鐵按需選擇。

目錄

常見的有6中方式:

容器式

便捷式

廣播式

進程式

SingleTask式

實現方法

1.容器式

容器式可能是我們最常見的方式之一了,主要通過創建一個全局的容器,把所有的Activity都保存下來,退出的時候循環遍歷所有activity,然後finish()掉。

BaseActivity添加代碼:

創建一個全局工具類:

這種方式是有一定的缺點的,我們的工具類ActivityUtils持有Activity的引用,當我們的應用發生異常,ActivityUtils持有的引用沒有被銷毀會導致部分內存問題,而且代碼量多,不夠優雅,諸多不便。

但是容器式這種方式還是有解決辦法的,我們可以採用弱引用的方式,就不存在前面所說的問題了,習慣於容器式的可以採用弱引用這種方式的。

2.便捷式

在之前,先講一下Activity的啟動模式:SingleTask

我們知道Activity有四種載入模式,而singleTask就是其中的一種,使用這個模式之後,當startActivity時,它先會在當前棧中查詢是否存在Activity的實例,如果存在,則將其至於棧頂,並將其之上的所有Activity移除棧。我們打開一個app,首先是一個splash頁面,然後會finish掉splash頁面。跳轉到主頁。然後會在主頁進行N次的跳轉,期間會產生數量不定的Activity,有的被銷毀,有的駐留在棧中,但是棧底永遠是我們的HomeActivity。這樣就讓問題變得簡單很多了。我們只需兩步操作即可優雅的實現app的退出。

有了這麼一個啟動模式,就好辦了,我們將退出的出口放在MainActivity中所有事都解決了。

那麼這種方法為什麼叫便捷式呢?這種方式代碼量很少而且很好理解、優雅,而且市面上很多APP都是基於此實現的。我們在MainActivity中實現如下代碼:

不要著急,不要以為就完了,還有很重要的一步:將MainActivity設置為singleTask。

上面這種方法就是我個人認為最簡便的方式了,這也符合有些要求按2次退出。

3.廣播式

我相信很多的老鐵是使用的廣播式,畢竟很方便,先上代碼,再說利弊。

最後再需要退出的地方,發送一個廣播就可以了,注意Action和註冊的相同就可以了。

但是個人覺得這種方式還是太耗性能,畢竟廣播是進程間通信,我們一個退出APP功能不是特別的有必要。

4.SingleTask式

簡單解釋一下SingleTask這種啟動模式的兩個特點:

清除堆棧中處於當前Activity上方的Activity

堆棧中含有你要啟動的Activity時,不會重新創建。

假設我們的MainActivity是使用的SingleTask的啟動模式,假設我跳轉到了其他的頁面,然後使用startActivity(this,MainActivity.class)的方式再次啟動MainActivity,這時MainActivity走到onNewIntent()方法,然後按照生命周期onRestart()——>onStart()——>onResume(),MainActivity不會重新創建。

既然有這麼一個特點我們就可以分三步來退出APP:

第一步:MainActivity設置為SingleTask。

第二步:重寫MainActivity中的onNewIntent方法

第三步:需要退出時在Intent中添加退出的tag

雖然這種方式簡單、便捷,但還有弊端:當我們需要退出的時候,假如是在其他的Activity中退出,這時MainActivity要走一段生命周期的方法,有點浪費。

5.進程式

這三種方式都能夠達到殺死進程的效果,直接退出APP,但是這種太暴力了不推薦使用,而且使用體驗不好。不知道是不是華為手機問題,我用華為P10 Plus使用這種方式退出的時候要白屏、閃屏一下,反正就是不建議使用這種方式。

總結

其實嚴格來說,還有一種方式就是拋異常讓APP強制退出,因為感覺用的人不多就沒有細說。

上面的幾種方式中,最不推薦的就是最後第五種方式,暴力而且用戶體驗不好。大家在項目中看著需求、以及自己習慣的方式來選擇就好,今天就到這裡了。

溫馨提示:

另外關注公眾號,還有一些個人收藏的視頻:

關注我,一定會有意想不到的東西等你:

每天專註分享Android、JAVA乾貨

備註:程序圈LT


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序圈LT 的精彩文章:

推薦Android幾個比較實用的Github開源項目

TAG:程序圈LT |