Message an inaktiven Main-Thread

  • 9 Antworten
  • Letztes Antwortdatum
znieh99

znieh99

Fortgeschrittenes Mitglied
12
Hallo Forum,
ich starte im Main-Thread (mit Class.start()) einen Thread der periodisch Message an den Main-Thread sendet. Das funktioniert klaglos. Aber was passiert mit den Message wenn der Main-Thread inaktiv ist?

- empfängt er sie trotzdem oder werden sie in einer Queue gespeichert oder gehen sie verloren?
lg heinz
 
Hi welche Art von Nachrichten sind das den?

Meinst du mit Inaktiv das gerade eine andere Anwendung im Vordergrund ist oder das die Activity beendet ist?
 
jogimuc schrieb:
Meinst du mit Inaktiv das gerade eine andere Anwendung im Vordergrund ist oder das die Activity beendet ist?
Hallo jogimuc,
es geht um eine Handler-Message und wenn gerade eine andere Anwendung im Vordergrund ist.
 
a) wie schickst du die "Message" ? - Welche Technik ?
b) Was hindert dich daran, selbst auszuprobieren , ob ein FIFO vorliegt ?

P.S. Ich denke , dass Du mit Listener/Callbacks besser bedient wärst
 
Zuletzt bearbeitet:
swa00 schrieb:
a) wie schickst du die "Message" ? - Welche Technik ?

Senden:
Code:
 /**
     * Startpunkt des Thread
     */
    public void run() {
        System.out.println("LooperThread vor Looper: " + new Date());

        Looper.prepare();
        mInternHandler = new Handler() {
            public void handleMessage(Message msg) {
                // mach was
                System.out.println("LooperThread im Loop: " + new Date());
                mExternHandler.sendEmptyMessage(msg.what);
            }
        };          //end Handler ------------------------------
        startWork();

        Looper.loop();
    }           //end run --------------------------------------

Empfangen:
Code:
mExternHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                // Hier kommt die Message vom Thread BattChecker
                count++;
                System.out.println("ExternHandler in Main : " + count + " " + new Date());
                ui_Txt_Action.setText("MSG gesendet: " + msg.what + " count: " + count);

                super.handleMessage(msg);
            }
        };          //end ExternHandler ----------------

swa00 schrieb:
b) Was hindert dich daran, selbst auszuprobieren , ob ein FIFO vorliegt ?
Ich habe mit den testweise eingesetzten 'count' festgestellt, dass der Main-Thread auch läuft wenn er nicht im Vordergrund ist (zumindest im Emulator),
lg heinz
 
Ich habe mit den testweise eingesetzten 'count' festgestellt, dass der Main-Thread auch läuft wenn er nicht im Vordergrund ist (zumindest im Emulator),

Richtig , der hat auch nichts damit zu tun .
Es wird allerdings kein "dauerhafter" Zustand sein , da Android diesen irgendwann beenden wird.

Und deine Messages werden ins Nirwana verschwinden.
FIFO (u.ä.) hast du nur bei Pipes die z.b. TCP/IP basiernd sind.
 
swa00 schrieb:
Es wird allerdings kein "dauerhafter" Zustand sein , da Android diesen irgendwann beenden wird.
Wenn Android meinen Main-Thread killt, wird doch auch der zugehörige Hintergrund-Thread gekillt?

Ich möchte gern folgenden Ablauf realisieren:
- Eine Activity die einen Hintergrund-Thread startet/stoppt und mit Parametern initialisiert.
- Der Hintergrund-Thread der den Ladezustand der Batterrie periodisch überprüft und bei erreichen der Grenzwerte eine diesbezügliche Meldung ausgibt.
lg heinz
 
Heinz , du bist m.E. auf dem falschen Weg.

Baue dir einen Broadcast Receiver , der dir lediglich bei Statusänderung des Akkus einen Callback liefert.
Warum dazu einen Thread , wenn der eh nix Neues an Info hat ?
 
Zuletzt bearbeitet:
Danke Stefan,
werde ich mir ansehen,
lg heinz
 
znieh99 schrieb:
Wenn Android meinen Main-Thread killt, wird doch auch der zugehörige Hintergrund-Thread gekillt?

lg heinz


Nein, ganz so einfach ist es nicht. Nur wenn du, die komplette App beendest, werden alle Threads beendet. Wenn du eine Aktivitiy beendet, können Thread, die du dort gestartet hast, weiter existieren.

Dh. du musst hinter Dir aufräumen, und alle Threads eigenhändig beenden (interupt). :)

Und Android killt den MainThread sehr selten. Meistens wird es nur in den Hintergrund geschoben. Das spart Zeit.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: znieh99

Ähnliche Themen

FabianDev
Antworten
5
Aufrufe
768
swa00
swa00
S
Antworten
0
Aufrufe
679
Sergio13
S
T
Antworten
0
Aufrufe
88
tomasherrmann
T
Zurück
Oben Unten