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?

War es hilfreich?

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:

Android Remote Service

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top