2011-07-18 59 views
1

我正在寻找一种方法从Linux内核(使用它的进程ID)杀死前台Dalvik App(主动运行)?Android:杀死(全部)前台运行应用程序

我该如何做到这一点?有任何想法吗?内核是否看到正在运行的应用程序的pid?

如何为例如。 Android中的进程管理器/任务管理器实现了这个?

任何线索?

编辑:

我看问题是一路杀一个应用程序,“行为不同于预期”。

这种“不同的行为”总是固定的。想想它就像发送消息到特定的端口。

我该如何杀死一个应用程序,并且仍然拥有杀死它的权限?这就是为什么我想知道如果我不得不在内核中将这个模块放在框架上的话。

+1

我发现一个可以使用android.os。 Process.killProcess()。但是使用任务应该有特殊的权限。谁有这个特别许可?我怎样才能实现它? – user489152

+0

除非您拥有供应商的平台证书来签署代码,否则您无法在非根设备上获得此类权限。 –

+0

我想将此代码功能作为系统服务器添加到Android框架,以便当代码检测到一个奇怪的应用程序行为时,它将终止该应用程序。有任何想法吗? – user489152

回答

3

这将让所有正在运行的进程,并杀死那些与指定的PID:

ArrayList<Integer> pids = new ArrayList<Integer>(); 
ActivityManager manager = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE); 
List<ActivityManager.RunningAppProcessInfo> listOfProcesses = manager.getRunningAppProcesses(); 
for (ActivityManager.RunningAppProcessInfo process : listOfProcesses) 
{ 
    if (pids.contains(process.pid)) 
    { 
     // Ends the app 
     manager.restartPackage(process.processName); 
    } 
} 

您将需要这些权限来做到这一点:

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

@ Arash.A:很酷。有用。但是我怎样才能杀死前台应用程序。我将如何确定(从应用程序外)一个活跃的?目前这段代码是我的应用程序代码的一部分。但是现在我想从外面杀掉我的App的应用程序(这是在前台),这件作品应该添加到任务管理器或其他东西。 Android中的任务管理器代码在哪里? – user489152

+0

如果你只想结束你的应用程序,你可以在'for'循环中加入一个“if”语句来检测process.processName是否与你的应用程序的进程名匹配。如果你知道你的应用程序的pid,你可以将它与process.pid比较,看它是否匹配。一旦你确定了哪些正在运行的进程是你的,你可以调用manager.restartPackage(process.processName)来结束应用程序。 –

+0

A:谢谢。我试图做的是有一个后台服务运行,它知道前台应用程序(由用户打开)并杀死它。因此,此服务应具有杀死应用程序的权限,并且应该从活动管理器以某种方式获取“当前前台应用程序”的信息。所以我的问题是,活动经理是否有这些信息?我如何访问这个? – user489152

相关问题