看到很多關於應用退出的問題,結合起來使用下面方法最爲簡單最爲有效。
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就不起作用了。
- ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
- manager.restartPackage(getPackageName());
- <uses-permission android:name="android.permission.RESTART_PACKAGES"/>
方法三:這個方法是2.2以後取代restartPackage的方法。但是google給的只是一個空殼,這個方法依然不起作用。
- activityManager.killBackgroundProcesses(packageName);
- <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
方法四:創建一個ActivityInstance單例模式來統一管理Activity的退出。這是一個很雞肋的方法,因爲它確實有用,但又這麼寫又有點浪費。
具體做法就是寫一個ActivityInstance單例,在每一個activity啓動的時候都調用它的ActivityInstance.addActivity(this);方法,當退出應用時,調用ActivityInstance.exit();方法。
- public void exit(){
- for(Activity at:activityList){
- at.finish();
- }
- System.exit(0);
- }
方法五:發送廣播退出。在需要結束應用時,發送一個特定的廣播,每個Activity收到廣播後關閉。如果不閒麻煩可以這樣做,個人來講還沒有方法四好。
方法六:遞歸退出,在打開新的Activity時使用startActivityForResult,然後自己加標誌,在onActivityResult中處理,遞歸關閉。
方法七:退出的時候跳轉回HOME,一種假的退出方法,但可以退出,該方法只是回到HOME頁而將本身應用虛假退出。
- Intent startMain = new Intent(Intent.ACTION_MAIN);
- startMain.addCategory(Intent.CATEGORY_HOME);
- startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(startMain);
- System.exit(0);
方法八: activityManager.forceStopPackage(PackageName);看到forceStop是不是感覺還挺熟悉的,我們系統設置裏面關閉應用就是調用的這個方法。這個方法可以完全關閉應用程序而且只要一個包名。
不過這個方法是系統隱藏的,我們寫應用的時候在ActivityManager裏是找不到這個方法的。這就涉及到了調用系統隱藏API的方法。下面是通過反射機制來獲取該方法。
- ActivityManager sd = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
- Method method= Class.forName("android.app.ActivityManager")
- .getMethod("forceStopPackage", String.class);
補充:其實Android有自己的內存管理機制並不需要我們完全退出本身應用,當用戶按退出鍵的時候用戶回到HOME或其他相關界面即可。在沒有特殊要求的時候虛假退出就可以。