2015-12-25 11 views
5

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?

+0

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

+0

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) –

+0

oder ein Runnable zu einem ExecutorService –

Antwort

4

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.

+0

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? –

+1

_ "... 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