Android中如何像 360 一樣優雅的殺死后臺服務而不啟動
Android中,雖然有很多方法(API或者shell命令)殺死后臺`service`,但是仍然有很多程序幾秒內再次啟動,導致無法真正的殺死。這里主要著重介紹如何像 360 一樣殺死Android后臺服務,而不會再次啟動。
一、已知的 kill
后臺應用程序的方法
android.os.Process.killProcess(pid);
activityManager.killBackgroundProcesses(pkgName);
kill -9 pid
</ul>
這三種方法都可以“殺死”后臺應用程序,但是都會自啟動,對于前面兩種直接使用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程序,而不會自動啟動。親測:微信,淘寶,酷我,等一系列應用,殺死后不會再啟動!
來自:http://my.oschina.net/u/561492/blog/277813