轉:blog.csdn.net/dliyuedong/article/details/24448899
這幾天一直在做一個Andorid應用,想實現任務管理器的效果,能夠徹底關閉其他的程序,網上也看了很多資料,很多都是使用後restartPackage或者killBackgroundProcesses函數去進行,但是這一種並不能真正的將應用關閉.我的手機是root過的defy,嘗試着使用其他的方法操作.
① kill -9 pid
這個命令對於使用linux的都非常的熟悉,強制殺掉一個進程.獲取要殺掉進程的pid,然後直接執行上述命令,但是測試後發現後,在手機中setting-app中,該應用依舊是運行狀態,force close依舊可以點擊,並沒有達到效果.
②使用Android自帶命令(am force-stop)
這個是查看adb幫助的時候發現的,原來adb的操作是相當的豐富的,不僅可以啓動應用,發送廣播,查看日誌,還能對應用進行操作,比如強制關閉,十分的強大.根據這個,成功實現關閉其他應用的操作. (adb介紹官方文檔)
- package cn.androiddevelop.flushapk.util;
- import java.io.IOException;
- import java.io.OutputStream;
- /**
- * 執行android命令
- *
- * @author Yuedong Li
- *
- */
- public class SuUtil {
- private static Process process;
- /**
- * 結束進程,執行操作調用即可
- */
- public static void kill(String packageName) {
- initProcess();
- killProcess(packageName);
- close();
- }
- /**
- * 初始化進程
- */
- private static void initProcess() {
- if (process == null)
- try {
- process = Runtime.getRuntime().exec("su");
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * 結束進程
- */
- private static void killProcess(String packageName) {
- OutputStream out = process.getOutputStream();
- String cmd = "am force-stop " + packageName + " \n";
- try {
- out.write(cmd.getBytes());
- out.flush();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * 關閉輸出流
- */
- private static void close() {
- if (process != null)
- try {
- process.getOutputStream().close();
- process = null;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }