1、ActivityManager.java killBackgroundProcesses
該方法的使用目前僅見與Settings模塊在應用管理中對正在運行的後臺應用進行中止。須在manifest文件中申明相關權限。調用該方法殺掉後臺進程後,系統會根據一系列的判斷來決定是否有必要從新啓動該進程。不會殺掉有persistent 屬性的進程。不會殺掉system級別權限的進程。被殺掉的進程當前的ADJ級別要大於SERVICE_ADJ。電視開發中,在殺死某些直播軟件後起聲音也可能不會中止。
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses(包名);
權限:<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
2、ActivityManager.java forceStopPackage
該方法的使用目前也僅見於Settings模塊。擁有相同uid的進程都會被殺掉。運行其中的服務都是中止掉,activity都會移除掉,應用不會從新啓動。須在manifest文件中申明相關的權限。經測在4.x的系統中沒法使用此方法。
ActivityManager mAm = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
mAm.forceStopPackage(包名);
權限:<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"/>
3、Process.java KillProcess
最終調用的是Linux API kill()方法發送SIGKILL信號。理論上該接口容許咱們憑藉pid號殺掉任意進程,但Kernel 仍然會對調用者進行標準的檢查已判斷哪些進程容許被調用者殺掉。如下幾種狀況能夠調用此方法:一、調用者自殺。二、被殺進程是由調用者建立。三、共享相同UID的進程可以互殺。
此方法在Google原生代碼中多用於Framework 層AM服務,單個應用運用此方法較少。大多數的用法爲進程自我銷燬,基本沒有看到運用此方法殺非本進程的用法。
基本用法:android.os.Process.killProcess(android.os.Process.myPid());
Process.killProcess(Process.myPid());
System.exit(10);
4、System.java exit
致使虛擬機中止運行而且該應用退出,所帶參數若是非0,則說明是非正常退出。此方法在Google原生代碼中多用於cts類和tool類,即(J2SE代碼中對應的main方法中調用此方法退出),單個應用程序基本沒有運用此方法。平臺偶爾有使用此方法完成應用啓動後的退出。但貌似該方法會引發findBug問題。不建議使用。
5、Runtime.java exit
其實system.java 的 exit方法的具體實現即爲: Runtime.getRuntime().exit(code);Google原生代碼中該方法僅在於Wallpaper相關的幾個動態WallPaper對應的Activity中的onPause中使用過。平臺基本都是採用此類方法完成應用的自動退出。任務完成後,發一個延時消息,完成應用進程的自我銷燬。若無延時,退出時會偶現一些fc、或者退出toast服務顯示等異常狀況。其標準用法以下:
private static final int MSG_DELAY_EXIT_APP = 0;
private static Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case MSG_DELAY_EXIT_APP:
Runtime.getRuntime().exit(0);
break;
}
}
};
mHandler.sendEmptyMessageDelayed(MSG_DELAY_EXIT_APP, 4000);java