2017-01-19 151 views
0

我有一个应用程序与两个进程。第二个过程在创建活动时开始。发现在清单这项活动的摘录如下:如何杀死Android应用后台进程?

<activity 
     android:name=".ActivityInAnotherProcess" 
     android:process=":anotherprocess" 
     android:launchMode="singleTask" 
     ... 

后“:anotherprocess”开始我不过需要以某种方式杀死主过程中,通过亚洲开发银行,在代码中。

我试过DDMS中的“终止应用程序”,主进程被终止,但在几秒钟后重新创建。

我试过这段代码:

String packageName = c.getPackageName(); 
ActivityManager activityManager = (ActivityManager) c.getSystemService(Context.ACTIVITY_SERVICE); 
activityManager.killBackgroundProcesses(packageName); 

但主要的进程被终止只有几秒钟后重新创建。

更新: 上面的代码工作。我在另一个进程中启动Activity之后几秒钟就调用它,但似乎另一个进程在我杀死主进程之前并未完全启动。现在我正在杀死另一个进程中的主进程。这现在起作用。谢谢大家!

+0

你试过了吗? android.os.Process.killProcess(android.os.Process.myPid()); – Alan

+0

@dalmendray为什么你想杀死后台进程? –

+0

@Charuka我需要杀死主进程来模拟Android何时执行它。我在我的代码中进行了进程间通信,我需要根据主进程被终止的事实来进行测试(因为如果Android需要更多资源,可能会发生) – dalmendray

回答

0
List<ApplicationInfo> packages; 
PackageManager pm; 
pm = getPackageManager(); 
packages = pm.getInstalledApplications(0); 

ActivityManager mActivityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); 


for (ApplicationInfo packageInfo : packages) { 
    if((packageInfo.flags & ApplicationInfo.FLAG_SYSTEM)==1)continue; 
    if(packageInfo.packageName.equals("mypackage")) continue; 
    mActivityManager.restartPackage(packageInfo.packageName); 
} 

如果API> = 8个使用mActivityManager.killBackgroundProcesses(字符串的packageName)

如果API < 8使用mActivityManager.restartPackage(packageInfo.packageName);

+0

如果您已经知道程序包名称,为什么要进行for循环?应该更好地调用mActivityManager.killBackgroundProcesses(“mypackage”) – dalmendray