2017-01-02 1 views
0

Die Hintergrundarbeit in meiner Android-Anwendung erfolgt durch die Kommunikation sequenzieller Prozesse, dh Threads, die auf Befehle auf einem BlockingQueue hören.Android onPause: Warum stoppen Threads überhaupt?

Die Threads/Aktoren werden im MainApplication initialisiert.

diese Fäden während eines Activity.onPause Stoppen bringt einige Komplikationen, zum Beispiel einige Befehle auf dem BlockingQueuevoronResume genannt ankommen wird.

Frage 1: Warum sollte man diese Threads während überhaupt stoppen? Sie befinden sich in einem blockierten Zustand und arbeiten nicht, daher sollten sie keine Auswirkungen auf die Leistung haben.

Frage 2: Wenn und dann onDestroy genannt wird, was mit diesen Themen geschieht? Wird die ART sie töten? .interrupt() sie? Gibt es eine Auszeit?

+0

* keine Arbeit * überprüfen sie nicht, ob es etwas zu tun gibt? –

+0

Die Threads befinden sich im Wartezustand. –

Antwort

2
  1. Ihre Frage Meinung basiert, aber nicht stoppen sie wahrscheinlich eine Leistung kostet. Als allgemeine Faustregel sollten Sie alle Arbeiten stoppen, wenn die Benutzerschnittstelle dem Benutzer nicht angezeigt wird (nach onStop). Es liegt also an dir, ob es gut genug ist, sie in einem Wartezustand zu halten.

  2. onDestory "zerstört" nur Ihre Activity Instanz, nicht Ihre VM-Instanz (oder Prozess). Andere Singleton-Objekte oder Objekte, die nicht mit Müll gesammelt wurden, bleiben am Leben, einschließlich Hintergrundthreads.

+0

Es zerstört nicht meine MainApplication, oder tut es? Die Threads werden von dort gestartet. –

+0

Nein ist nicht. Aber Sie müssen verstehen, dass Android Ihre App/Ihren Prozess ohne Warnung vollständig beendet, sobald Ihre App keine aktiven Komponenten (Activity, BroadcastReceiver, Service usw.) mehr hat, um den RAM-Speicher aufzuräumen, damit andere Apps ihn verwenden können. In Extremfällen (Low-Memory-Geräte) können Ihre Threads eventuell gestoppt werden. –

Verwandte Themen