今天在編寫 application 通用組件時(shí)茅郎,需要在低內(nèi)存的回調(diào)中殺死進(jìn)程开皿,所以找了下 androd 傻進(jìn)程的方法耕拷,總結(jié)下來有下面幾種:
- 根據(jù)進(jìn)程名稱殺進(jìn)程
android.os.Process.killProcess(android.os.Process.myPid());
代碼本身沒什么可以說的舒帮,需要注意的是儿惫,當(dāng)進(jìn)程在前臺時(shí)嗦随,會殺死現(xiàn)有進(jìn)程列荔,然后再重新啟動改線程,類似于手機(jī)的重啟枚尼。但是只要我們把 app home 鍵切到后臺贴浙,再殺進(jìn)程就不會重啟進(jìn)程了,這里適合我的需求署恍,當(dāng) app 進(jìn)程處于后臺進(jìn)程并切在回收列表中部時(shí)崎溃,自己殺死自己,放置系統(tǒng)殺死集成回收盯质,再次啟動進(jìn)程時(shí) activity 棧緩存的問題
- 用 java api 退出當(dāng)前線程
System.exit(0);
和上面面臨同一個問題袁串,進(jìn)程在前臺時(shí),殺完進(jìn)程會重啟進(jìn)程
- 殺別的進(jìn)程呼巷,單殺不死自己
有殺死和重啟進(jìn)程2種囱修,都需要相關(guān)權(quán)限
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses("com.zhang.wei");
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
activityManager.restartPackage("com.zhangwei");
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
- 需 root 權(quán)限
這個肯定用不上,但是這里也寫上吧王悍,方便對比查閱
try {
ActivityManager am =(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
Method method = Class.forName("android.app.ActivityManager").getMethod("forceStopPackage",String.class);
method.invoke(am,pkgName);
}catch(Exception e){
e.printStackTrace();
}
<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" />