關於android應用退出的問題

看到很多關於應用退出的問題,結合起來使用下面方法最爲簡單最爲有效。

Intent exitIntent = new Intent(context, MainActivity.class);
exitIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
exitIntent.putExtra(EXTRA_EXIT, true);
context.startActivity(exitIntent);

跳到主界面,並清除棧中所有的activity,然後在主界面中加入以下代碼實現完全退出應用功能

exit = getIntent().getBooleanExtra(EXTRA_EXIT, false);
if (exit) {
finish();
android.os.Process.killProcess(android.os.Process.myPid());
}


以下文章內容可以提供一些思路和想法,摘自文章:http://yangguangfu.iteye.com/blog/2025508

看到很多關於應用退出的問題,今天在這裏爲大家簡單總結一下,如果說的不對還望大家見諒。

方法一:System.exit(0) 和android.os.Process.killProcess(android.os.Process.myPid()),我想很多人都嘗試過,當關 閉多個Activity的時候這兩個方法根本不起作用,原因當然和Activity的堆棧管理有關。

方法二:restartPackage,這種方法會終止一切和這個程序包關聯的,所有共享同一uid的process被kill,所有   的activity會被removed所有創建的服務會停止,還會發一個廣播 Intent.ACTION_PACKAGE_RESTARTED 。衆所周知這個方法已經過時,2.2就不起作用了。

  1.     ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);   
  2.     manager.restartPackage(getPackageName());
  3. <uses-permission android:name="android.permission.RESTART_PACKAGES"/>
複製代碼

 

方法三:這個方法是2.2以後取代restartPackage的方法。但是google給的只是一個空殼,這個方法依然不起作用。

  1. activityManager.killBackgroundProcesses(packageName);
  2. <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
複製代碼

方法四:創建一個ActivityInstance單例模式來統一管理Activity的退出。這是一個很雞肋的方法,因爲它確實有用,但又這麼寫又有點浪費。

具體做法就是寫一個ActivityInstance單例,在每一個activity啓動的時候都調用它的ActivityInstance.addActivity(this);方法,當退出應用時,調用ActivityInstance.exit();方法。

  1. public void exit(){
  2.                                for(Activity at:activityList){
  3.                  at.finish();
  4.       }
  5.     System.exit(0);
  6. }
複製代碼

方法五:發送廣播退出。在需要結束應用時,發送一個特定的廣播,每個Activity收到廣播後關閉。如果不閒麻煩可以這樣做,個人來講還沒有方法四好。
方法六:遞歸退出,在打開新的Activity時使用startActivityForResult,然後自己加標誌,在onActivityResult中處理,遞歸關閉。
方法七:退出的時候跳轉回HOME,一種假的退出方法,但可以退出,該方法只是回到HOME頁而將本身應用虛假退出。

  1.     Intent startMain = new Intent(Intent.ACTION_MAIN);
  2.                      startMain.addCategory(Intent.CATEGORY_HOME);
  3.                      startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  4.                      startActivity(startMain);
  5.                      System.exit(0);
複製代碼

方法八: activityManager.forceStopPackage(PackageName);看到forceStop是不是感覺還挺熟悉的,我們系統設置裏面關閉應用就是調用的這個方法。這個方法可以完全關閉應用程序而且只要一個包名。
不過這個方法是系統隱藏的,我們寫應用的時候在ActivityManager裏是找不到這個方法的。這就涉及到了調用系統隱藏API的方法。下面是通過反射機制來獲取該方法。

  1. ActivityManager sd = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
  2. Method method= Class.forName("android.app.ActivityManager")
  3. .getMethod("forceStopPackage", String.class);
複製代碼

補充:其實Android有自己的內存管理機制並不需要我們完全退出本身應用,當用戶按退出鍵的時候用戶回到HOME或其他相關界面即可。在沒有特殊要求的時候虛假退出就可以。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章