標籤:
Android中,雖然有很多方法(API或者shell命令)殺死後台`service`,但是仍然有很多程式幾秒內再次啟動,導致無法真正的殺死。這裡主要著重介紹如何像 360 一樣殺死Android後台服務,而不會再次啟動。
kill 後台應用程式的方法
* android.os.Process.killProcess(pid);
* activityManager.killBackgroundProcesses(pkgName);
* kill -9 pid
這三種方法都可以“殺死”後台應用程式,但是都會自啟動,對於前面兩種直接使用Android的API就行了,所以就不多介紹了。這裡稍微介紹一下 最後一個方法的用法: kill -9 pid;
方法: kill -9 pid這其實是一條shell 命令,我們知道Android的底層是Linux系統,所以在Android上可以使用所有的Linux終端命令。那麼如何結合在代碼中呢,貼一段代碼
private void killProcess(String pid) {
Process sh = null;
DataOutputStream os = null;
try {
sh = Runtime.getRuntime().exec("su");
os = new DataOutputStream(sh.getOutputStream());
final String Command = "kill -9 " + pid + "\n";
os.writeBytes(Command);
os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
sh.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
該方法最重要的功能就是告訴你,怎麼在Android程式中執行Linux shell 命令
殺死後台service而不自啟動: am (Activity Manager)命令相信很多人對 am 命令都挺熟悉的,它是Android系統中/system/bin/目錄下的一條命令。不僅可以在終端下啟動一個應用程式,還可以啟動Service,發送 broadcast以及Intent action ,force stop process 等等,功能非常強大。這裡我們要用到一個功能就是強制停止應用程式!
對於命令 am 的介紹與用法,官網給的非常情況,請參照Android 官網: http://developer.android.com/tools/help/adb.html#am
我們用到的方法和功能是:am force-stop <PACKAGE>
下面是我們的代碼舉例
private void forceStopAPK(String pkgName){
Process sh = null;
DataOutputStream os = null;
try {
sh = Runtime.getRuntime().exec("su");
os = new DataOutputStream(sh.getOutputStream());
final String Command = "am force-stop "+pkgName+ "\n";
os.writeBytes(Command);
os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
sh.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
通過上面的這段代碼,我們調用forceStopAPK方法,傳遞一個應用程式的包名,那麼我們就可以殺死對應的Android程式,而不會自動啟動。
強制結束Android進程