Android 完美退出 App (Exit)

最近兩天爲了解決Android上面退出程序問題折騰了半死,在google & baidu 上面找了好久、好久出來的徹底千篇一概,說的方法有三,可是通過我試驗後所有不行。java

      三個方法分別是:app

 

  1. killProcess, 這種方式當你kill後 Activity 會返回到上一個Activity
  2. Android Level 8(包含8)前使用一個API來操做,Level8之後又是另一種,因此不能通用
  3. 使用 FLAG_ACTIVITY_CLEAR_TOP,從 A 到 B

下面介紹本身的方式:ide

你們都知道 Android 的 Activity 是存着歷史棧的,好比從 A -> B -> C,C 完成 finish 後回到 B,把全部的Activity 都 finish了,程序就天然退出了。 固然在 finish 的同時也須要是否本身程序的其餘資源。因此須要想個辦法把 Activity 給存起來。而後在程序退出的地方調用它們的 finish()方法。測試

使用全局變量。對了,第一個想到的就是繼承 Application,代碼入下。this

[java] view plain copygoogle

  1. public class AgentApplication extends Application {  
  2.   
  3. private List<Activity> activities = new ArrayList<Activity>();  
  4.   
  5.     public void addActivity(Activity activity) {  
  6.         activities.add(activity);  
  7.     }  
  8.   
  9.     @Override  
  10.     public void onTerminate() {  
  11.         super.onTerminate();  
  12.           
  13.         for (Activity activity : activities) {  
  14.             activity.finish();  
  15.         }  
  16.           
  17.         onDestroy();  
  18.           
  19.         System.exit(0);  
  20.     }  
  21. }  


而後在 Activity  onCreate 的時候來調用  addActivity (),有人可能想到這個Application須要在全部的 Activity  onCreate的時候都使用,須要作一個單例實例。其實根本不須要。在 Activity 中使用  this.getApplication() 就能夠了。spa

最後在你須要推出程序的地方調用 application.onTerminate() 就能夠了。記住:super.onTerminate() 必須調用,代碼中的 onDestroy()是我本身的釋放其餘資源的方法,不是系統的。.net

 

運行以上代碼後,在LogCat 中會出現一行提示:blog

Process  包名 (pid  xxxxx)  has died.  證實你的程序退出了。如今你能夠測試了。繼承

相關文章
相關標籤/搜索