2017-01-19 209 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