einen Thread beenden, nachdem die Hauptaktivität fortgesetzt wurde?
-
28-10-2019 - |
Frage
Ich habe dieses Problem in Android.Ich habe eine Hauptaktivität, die einen Thread mit diesem aufruft
Runnable work = new Runnable() {
public void run() {
while (kill) {
try {
Thread.sleep(5000);
connect();
} catch (InterruptedException ex) {
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
};
töte es ist ein öffentlicher Boolescher Wert in MainActivity. Was kann ich tun, um den Thread zu speichern, damit ich den Thread trotzdem beenden kann, wenn ich die Aktivität wieder aufnehme?
Lösung
Ich denke, Sie möchten etwas näher an dem tun, was diese Lösung schlägt vor.
Wenn Sie dies jedoch weiterhin in einem Thread
tun möchten, empfehlen wir Ihnen, eine neue Klasse von Thread
zu erweitern und eine Methode namens killMe()
hinzuzufügen.Dadurch wird das boolesche kill
-Flag (jetzt privat ) geändert.Dann können Sie in Ihrem onRetainNonConfigurationInstance()
diesen Thread
zurückgeben und ihn im onResume
erneut abrufen.Wenn Sie zurückkehren und die Aktivität nicht beendet wurde, können Sie einfach den killMe()
für den vorhandenen Thread
aufrufen.
Beispiel:
@Override
public Object onRetainNonConfigurationInstance() {
return thread;
}
Andere Tipps
Warum möchten Sie den Thread im Lebenslauf beenden?
Warum nicht den Thread im Wiederaufnahme-Teil starten und dann einen finally-Block einfügen, um die Tatsache zu behandeln, dass der connect()
unterbrochen ist, und wenn er erneut gestartet wird, müssen Sie nur die Verbindung erneut herstellen und den Vorgang ausführen.
Bei Mobilgeräten ist es am besten, in einem dauerhaften Speicher, in dem Sie sich befinden, ein Häkchen zu setzen, damit Sie bei einer Unterbrechung fortfahren können, wenn der Activity
erneut gestartet wird.
Sie haben eine hohe Wahrscheinlichkeit, unterbrochen zu werden. Entwerfen Sie also dafür.
Der Thread wird möglicherweise vom Betriebssystem beendet, sodass später nichts mehr gespeichert und beendet werden muss.
Wenn Sie so etwas wirklich tun müssen, starten Sie einen RemoteService
, da dieser in einem anderen Prozess als Ihr Activity
ausgeführt wird und mit größerer Wahrscheinlichkeit in der Nähe bleibt.
Vielleicht möchten Sie sich diese Frage ansehen: