Android應用的正確退出“姿勢”
阿新 • • 發佈:2018-11-16
在應用退出時候要關閉棧中所有的Activity才能完全退出應用,下面介紹常用的關閉所有Activity的方法。
一、容器法
顧名思義,容器法就是用一個列表記錄棧中所有的Activity,當應用退出時候遍歷所有的Activity執行finish()方法退出即可。具體實現如下:
程式碼非常容易理解,如何使用也是顯而易見的。import java.util.LinkedList; import java.util.List; import android.app.Activity; /** * android退出程式的工具類,使用單例模式<br/> * 1、在Activity的onCreate()的方法中呼叫add()方法新增新建立的Activity例項到mActivityList<br/> * 2、在Activity的onDestroy()的方法中呼叫remove()從mActivityList移除已經銷燬的Activity例項<br/> */ public class ExitAppUtils { /** * Activity的容器 */ private List<Activity> mActivityList; private static ExitAppUtils instance; /** * 將建構函式私有化 */ private ExitAppUtils() { mActivityList = new LinkedList<Activity>(); }; /** * 獲取ExitAppUtils的例項,保證只有一個ExitAppUtils例項存在 * * @return */ public static ExitAppUtils getInstance() { if (instance == null) { synchronized (ExitAppUtils.class) { if (instance == null) { instance = new ExitAppUtils(); } } } return instance; } /** * 新增Activity例項到mActivityList中,在onCreate()中呼叫 * * @param activity */ public void add(Activity activity) { mActivityList.add(activity); } /** * 從容器中刪除關閉的Activity例項,在onDestroy()中呼叫 * * @param activity */ public void remove(Activity activity) { mActivityList.remove(activity); } /** * 退出程式的方法 */ public void exit() { for (Activity activity : mActivityList) { activity.finish(); } System.exit(0); } }
二、啟動模式法
此方法比較優雅,不需要記錄所有存在棧中Activity,只是根據Activity的singleTask啟動模式的特點來處理即可。首先回顧下singleTask:棧內複用模式。這是一種單例模式,在這種模式下,只要Activity在一個棧中存在,那麼多次啟動此Activity都不會重新建立例項,只會將已經存在的Activity例項切換到棧頂,並移除棧中在該Activity之上的Activity例項(即清空棧頂),並且系統會回撥其onNewIntent方法。再來想象下,在應用中大多都會存在一個主Activity(主頁面),其他Activity都在這個主Activity上進行開啟、切換和關閉等操作,即主Activity總是存在任務棧的棧底。基於這種情況,可以將主Activity的啟動模式設為singleTask,並重寫onNewIntent方法在其中根據條件退出主Activity即可完成應用的退出。具體程式碼如下:
1、修改主Activity的啟動模式:
android:launchMode="singleTask"
2、重寫主Activity的onNewIntent方法:
//退出標誌 public static final String EXIT_APP = "exit_app"; @Override protected void onNewIntent(Intent intent) { boolean exit_app = intent.getBooleanExtra(EXIT_APP, false); if (exit_app) { finish(); } }
3、退出應用的操作:
Intent intent = new Intent(SecendActivity.this, MainActivity.class);
//將退出標誌設為true
intent.putExtra(MainActivity.EXIT_APP, true);
startActivity(intent);
與方法一對比可以發現,方法二使用更加簡單,程式碼實現也十分簡單優雅。我更喜歡第二種方式退出應用。