2017-01-19 5 views
0

J'ai une application avec deux processus. Le deuxième processus démarre lorsqu'une activité est créée. Trouvez ci-dessous un extrait de cette activité dans le manifeste:Comment tuer un processus d'arrière-plan de l'application Android?

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

Après la « : anotherprocess » commence je dois tuer le processus principal en quelque sorte, par l'ADB, dans le code, cependant.

J'ai essayé "Terminate Application" dans le DDMS et le processus principal est tué mais recréé après quelques secondes.

J'ai essayé ce code:

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

mais le processus principal est tué seulement être recréés après quelques secondes.

MISE À JOUR: Le code affiché ci-dessus fonctionne. Je l'appelais quelques secondes après le démarrage de l'activité dans l'autre processus, mais il semble que l'autre processus n'a pas été complètement démarré avant que j'ai tué le processus principal. Maintenant, je suis en train de tuer le processus principal de l'autre processus. Cela fonctionne maintenant. Merci a tous!

+0

avez-vous essayé? android.os.Process.killProcess (android.os.Process.myPid()); – Alan

+0

@dalmendray Pourquoi voulez-vous tuer le processus d'arrière-plan? –

+0

@Charuka Je dois tuer le processus principal pour simuler quand Android le fait. J'ai une communication interprocessus dans mon code que je dois tester en fonction du fait que le processus principal est détruit (comme cela pourrait être le cas si Android a besoin de plus de ressources) – dalmendray

Répondre

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); 
} 

si API> = 8 mActivityManager.killBackgroundProcesses d'utilisation (chaîne PackageName)

si API < 8 utilisation mActivityManager.restartPackage (packageInfo.packageName);

+0

Pourquoi faire la boucle for si vous connaissez déjà le nom du paquet? Il vaut mieux appeler mActivityManager.killBackgroundProcesses ("mypackage") – dalmendray