2015-04-04 85 views
0

我正在製作一個應用程序來鎖定其他應用程序,其中一個過程是使用掃描活動啓動的服務,如果它們列出了鎖定,該進程將被終止。 (這只是第一步)。我正在測試我的代碼,當我嘗試打開已列入鎖定的應用程序時,我的應用程序將與其服務一起崩潰。列出的用於鎖定的活動在共享首選項中列出,如果要鎖定它們,則布爾值爲true。Android - 殺死其他應用程序進程導致崩潰

public void run() { 


     //listen for apps opening 
     ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 

     List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); 

     if (tasks != null && tasks.size() > 0) { 
      String topActivity = tasks.get(0).topActivity.getPackageName(); 
      SharedPreferences settings = getApplicationContext().getSharedPreferences("data", Context.MODE_PRIVATE); 
      boolean Checked = settings.getBoolean(topActivity, false); 

      if (Checked==true) {   //if topactivity is marked for locking 
       am.killBackgroundProcesses(topActivity); //this causes the crash 
      } 
     } 
    } 
+0

有什麼有更多的信息可供選擇,比如當Logcat崩潰時打印的任何堆棧信息? – Jim 2015-04-04 16:37:14

+0

我沒有在模擬器中運行該應用程序,如果我安裝了某些軟件,我相信我可以從我的手機獲取logcat,如果有的話,我將粘貼到這裏 – user3343264 2015-04-04 16:40:04

+0

在手機連接的情況下從命令行運行「adb logcat」。或者甚至更好,在您的Android SDK工具文件夾中運行DDMS。 – Jim 2015-04-04 16:42:48

回答

1

檢查是否有KILL_BACKGROUND_PROCESSES權限在AndroidManifest.xml文件中聲明:

這種方法在每一個計劃到1000毫秒跑出一個計時器任務實現

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> 
+0

謝謝我意識到我錯過了這一點,但服務仍然沒有按預期工作 - 它不再崩潰,但如果我打開一個應該被殺死的活動它不會關閉 – user3343264 2015-04-04 16:50:39

+0

我認爲它只會殺死背景。如果打開它,則必須切換到另一個,然後等待計時器任務在它關閉之前運行。 – Jim 2015-04-04 17:20:05