2015-04-04 128 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