Android中如何像 360 同樣優雅的殺死後臺Service而不啓動

##1、已知的 kill 後臺應用程序的方法html

  • android.os.Process.killProcess(pid);
  • activityManager.killBackgroundProcesses(pkgName);
  • kill -9 pid

這三種方法均可以「殺死」後臺應用程序,可是都會自啓動,對於前面兩種直接使用Android的API就好了,因此就很少介紹了。這裏稍微介紹一下 最後一個方法的用法: kill -9 pid ;java

方法: kill -9 pid

這實際上是一條shell 命令,咱們知道Android的底層是Linux系統,因此在Android上可使用全部的Linux終端命令。那麼如何結合在代碼中呢,貼一段代碼android

<!-- lang: java -->
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 命令shell


##2、終極方法,殺死後臺service而不自啓動: am (Activity Manager)命令 相信不少人對 am 命令都挺熟悉的,它是Android系統中/system/bin/目錄下的一條命令。不只能夠在終端下啓動一個應用程序,還能夠啓動Service,發送 broadcast以及Intent actionforce stop process 等等,功能很是強大。這裏咱們要用到一個功能就是強制中止應用程序! 對於命令 am 的介紹與用法,官網給的很是狀況,請參照Android 官網: http://developer.android.com/tools/help/adb.html#am微信

咱們用到的方法和功能是:am force-stop <PACKAGE> 下面是咱們的代碼舉例code

<!-- lang: java -->
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程序,而不會自動啓動。親測:微信,淘寶,酷我,等一系列應用,殺死後不會再啓動!htm

相關文章
相關標籤/搜索