![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9MWbixmQzglb1cVW1Y1MiZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DOxczMwgzMxEzNwETMzEDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
當應用不再使用時,通常需要關閉應用,可以使用以下幾種方法關閉android應用:
第一種方法:首先擷取目前程序的id,然後殺死該程序。 建議使用這種方式
android.os.Process.killProcess(android.os.Process.myPid())
第二種方法:終止目前正在運作的Java虛拟機,導緻程式終止
System.exit(0);
或者
Runtime.getRuntime().exit(0);
第三種方法:強制關閉與該包有關聯的一切執行
android2.1之前
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
manager.restartPackage(getPackageName());
<!-- 添權重限 -->
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
這種方法會終止一切和這個程式包關聯的,所有共享同一uid的process被kill,所有的activity會被removed,所有建立的服務會停止,還會發一個廣播Intent.ACTION_PACKAGE_RESTARTED導緻所有注冊alarms被stopped,notifications被removed。
android2.2之後
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
manager.killBackgroundProcesses("com.xawx.gd"); // API Level至少為8才能使用
是以要用此方法最好加個判斷,如果是2.2之前的ROM就用restartPackage,之後的就用killBackgroundProcesses。
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
==================================================================================================
第四種方式:抛出異常
原理:在程式遇到非檢查異常時,程式退被強制退出,那麼虛拟器也将會被關閉,
是以利用一個非檢查異常,退出程式,但會遇到一個問題,就是強制退出的對話框的出現,是不是很惡心?
其實沒有關系,可以不讓系統彈出對話框,看代碼
第五種方式:用一個集合自己管理activity
當一個activity建立的時候,把執行個體傳遞到那個管理activity的集合裡,這個集合一般放在一個可全局通路的一個類内,最好那個類繼承Application,然後在menifest的<application>标簽的屬性name上加上自己寫的application類,這個類是單例的。退出的時候,周遊集合讓所有的activity
finish掉,最後調用關閉程序的那個方法
第六種方式:使用周遊的方式
這種方式比較繁瑣複雜,使用遞歸的方式,沒當打開一個activity的時候都用startActivityForResult(),在onActivityResult()裡接收結果關閉目前的activity,不推薦使用,太繁瑣麻煩。
第七種方式:使用intent的flag實作
原理:在android程式中,當打開一個activity的時候可以傳進去這樣一個flag
Activity.FLAG_ACTIVITY_CLEAR_TOP,當打開那個新的activity的時候,任務棧裡的所有activity将會被清空,最後隻剩下那個新的activity,然後在新的activity裡使用finish()把自己銷毀了就可以了。
作者:歐陽鵬 歡迎轉載,與人分享是進步的源泉!