簡單解釋一下:
android:alwaysRetainTaskState顧名思義就是【老是保留任務棧狀態】
Task指的是任務棧,是用於記錄Activity打開順序、保存狀態等。
如上圖,打開客戶端的順序是 SplashActivity --> GuideActivity --> MainActivity
(歡迎頁面 --> 功能引導頁面 --> 主頁面)
那麼,它在任務棧中就是, java
因爲咱們在Androidmanifest.xml文件中,給SplashActivity設置android:alwaysRetainTaskState='true',當咱們按HOME鍵返回桌面,任務棧的狀態被保留着,當咱們點擊應用圖標打開再次應用時,系統會判斷是否已經存在以SplashActivity爲根Activity的棧,若是有,那麼就直接使用該棧,並顯示棧頂的Activity。注意,只須要設置根Activity就能夠了。 android
最近發現了一個方法,
它就是Activity.moveTaskToBack(boolean),這個方法能夠把整個任務棧放到後臺運行,至關於PC窗口的最小化同樣!十分強大!通常來講,爲了保證應用在後臺運行,提升再次打開的速度,通常都不會直接finish(),(能夠參考一下QQ、微信、微博這些長駐留應用)爲了實現這個功能,比較通用的作法是在用戶按下返回鍵的時候,調用以下代碼實現: 微信
@Override public void onBackPressed() { //按返回鍵返回桌面 Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); }
這個方法雖然能夠實現咱們所需功能,可是,若是有用戶安裝了多個桌面應用的時候,可能會提出對話框,要求用戶選擇一個桌面運行。可是,若是把代碼改爲這樣: ide
@Override public void onBackPressed() { //按返回鍵返回桌面 moveTaskToBack(true); }
就不會出現上述問題了!!其它,QQ也是用這種方式實現的。有一點細微的差異。前者會返回桌面的默認頁面,後者返回桌面上次停留的頁面。 ui