2017-01-19 5 views
0

Ich habe eine App mit zwei Prozessen. Der zweite Prozess startet, wenn eine Aktivität erstellt wird. Unten finden Sie einen Auszug dieser Aktivität im Manifest:Wie kann man einen Android-App-Hintergrundprozess beenden?

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

Nach dem „: anotherprocess“ beginnt Ich muss irgendwie den Hauptprozess töten, durch die adb, in Code aber nicht.

Ich habe versucht "Anwendung beenden" in der DDMS und der Hauptprozess wird getötet, aber nach ein paar Sekunden neu erstellt.

Ich habe diesen Code versucht:

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

aber der Hauptprozess getötet wird erst nach einigen Sekunden neu erstellt werden.

UPDATE: Der oben angegebene Code funktioniert. Ich habe es ein paar Sekunden nach dem Start der Aktivität in dem anderen Prozess aufgerufen, aber es scheint, dass der andere Prozess nicht vollständig gestartet wurde, bevor ich den Hauptprozess beendete. Jetzt töte ich den Hauptprozess von dem anderen Prozess. Das funktioniert jetzt. Danke allen!

+0

haben Sie es versucht? android.os.Prozess.killProzess (android.os.Process.myPid()); – Alan

+0

@dalmendray Warum möchten Sie den Hintergrundprozess beenden? –

+0

@Charuka Ich muss den Hauptprozess töten, um zu simulieren, wenn Android es tut. Ich habe Interprozesskommunikation in meinem Code, die ich basierend auf der Tatsache testen muss, dass der Hauptprozess getötet wird (wie es sein könnte, wenn Android mehr Ressourcen benötigt) – dalmendray

Antwort

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

wenn API> = 8 Verwendung mActivityManager.killBackgroundProcesses (String package)

wenn API < 8 Verwendung mActivityManager.restartPackage (packageInfo.packageName);

+0

Warum die for-Schleife tun, wenn Sie den Paketnamen bereits kennen? Es sollte besser sein, einfach mActivityManager.killBackgroundProcesses aufzurufen ("meinpaket") – dalmendray

Verwandte Themen