Wenn Android
beschließt, eine Anwendung aus dem Stapel zu entfernen, um einige freizugeben, was passiert, wenn die Anwendung, die zerstört wird, gerade eine Schleife im Hintergrund ausführt? Wird die Schleife während der Ausführung beendet oder wartet die VM
auf das Ende?Kann Android meine App beenden, während sie sich in der Schleife befindet?
Antwort
Wird die Schleife während der Ausführung beendet oder wartet die VM, bis sie beendet ist?
Die Schleife ist beendet, sonst ist es nicht ganz "tödlich".
Einfacher Test:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
try {
while (true) {
Log.i("LOOP", "Running");
Thread.sleep(1000);
}
} catch (InterruptedException e) {}
}
}).start();
}
}
Swipe die App aus den zuletzt verwendeten Anwendungen.
Großartig, wenn ich gerade 200 lokale Benachrichtigungen im AlarmManager lösche oder 200 Produkte in der Datenbank hinterlege, kann dieser Vorgang in der Mitte reduziert werden? Wie verhindere ich das? –
_ "... diese Operation kann in der Mitte reduziert werden?" _ Ja. _ "Wie verhindere ich das?" _ Sie können das Systemverhalten nicht "verhindern". Aber du kannst einen [service] (http://developer.android.com/guide/components/services.html) verwenden (zB mit ['START_STICKY'] (http://developer.android.com/reference/android/ app/Service.html # START_STICKY) -Flag), das nach dem Beenden der App vom System neu gestartet wird. – Onik
Im Hintergrund bedeutet "nicht auf dem UI-Thread"? Afaik wird es garantiert einige Callbacks geben, aber dann wird es gestoppt. Siehe Anwendungslebenszyklus auf der Android-Entwickler-Website. – Fildor
Ja, aber nehmen wir an, ich frage in beiden Fällen - in einem IntentService oder einem Service (aber der Benutzer hatte vergessen, Nebenläufigkeit dafür zu liefern) –
oder ein Runnable zu einem ExecutorService –