最近公司工作不是很忙,就抽空研究了下Android的引導頁,但是在寫完引導頁並且進入到住頁面之后,在退出時,采用"再按一次退出"的方式去實現的,用的方式是殺掉進程跟exit,即:android.os.Process.killProcess(android.os.Process.myPid())或者System.exit(0);
但是問題出現了,因為我在進入引導頁Activity跟主界面Activity之前我是還有一個歡迎頁Activity的(注:這個入口Activity的作用是判斷此應用程序是否是首次加載,如果是首次加載就跳轉到引導頁中,否則,直接跳轉到主界面Activity中),當我用以上兩種方式的任意一種時,它並沒有完全退出應用程序,而只是純粹的銷毀當前的Activity並且返回上一個Activity中,也就是入口歡迎頁Activity,但這不是我想要的結果,所以就查了查關於完全退出應用程序的解決方案,最后找到了這個方案,完美解決該問題,希望可以借鑒給正在學習的Android菜鳥兒們。。。
Android退出應用程序回調用android.os.Process.killProcess(android.os.Process.myPid())或者System.exit(0),這只是針對第一個Activity時有效(即入口歡迎頁Activity),如果我的應用程序中需要用到多個Activity,並且要求每個Activity都可以直接退出該應用程序時,這個方案也就無法去實現了。
網上查了下,現下最流行的方式是定義一個棧,寫一個自定義的MyApplication類,利用單例模式去單獨對Activity進行管理,在每個Activity的onCreate()方法中調用MyApplication.getInstance().addActivity(this)將當前的Activity添加到棧中統一管理,如果需要退出應用程序時再調用MyApplication.getInstance().exit()方法直接就完全退出了應用程序。
實現方案:統一管理的好處就是如果需要退出時,直接將add進棧的Activity進行同意finish就行。exit方法的實現原理就是將棧中所有的Activity實例循環然后finish的。
具體調用方式如上所述,以下只是MyApplication的具體實現,至於如何調用此處不便贅述。
代碼如下:
public class MyApplication extends Application {
private List<Activity> activityList = new LinkedList<Activity>(); private static ExitApplication instance; private ExitApplication() { } // 單例模式中獲取唯一的ExitApplication實例 public static ExitApplication getInstance() { if(instance == null) { instance = new ExitApplication(); } return instance; } // 添加Activity到容器中 public void AddActivity(Activity activity) { this.activityList.add(activity); } public void exit() { for(Activity activity:this.activityList) { activity.finish(); } System.exit(0); } }