Android zugrif auf Thread nach Handy drehen.

Jw456

Top Contributor
Hallo welche Möglichkeit habe ich unter Android auf einen laufenden Thread zuzugreifen,
nachdem das Handy gedreht wurde?

Im Moment habe ich es über eine Klassenvariable (static Instanzvariable ) gelöst.

Beim drehen vom Handy wird ja die onCreate neu gestartet eigentlich sogar die Klasse neu erstellt.

Ich möchte es nicht mit static haben.
Wie Kann ich den noch laufenden Thread nach den Drehen aufrufen?

Eine klassische Instanzvariable ist ja nach dem drehen nicht mehr gültig.
Es muss also eine Möglichkeit geben wider an die Instanz des Threads zu kommen.

PS ich möchte keinen Service oder der gleichen benutzen es soll ein Thread bleiben.

Hier wie es momentan ist und auch geht.

Java:
public class MainActivity extends AppCompatActivity {
 
    static Thread t1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

     
        if (t1 == null) {
            t1 = new Thread(new MyThread());
            t1.start();
            Log.d("test","Thread wurde gestartet");
        }
    }

    public class MyThread implements Runnable {
        @Override
        public void run() {
            for (int i=0 ; i<100 ; i++) {
                Log.d("test","Thread läuft : "+ i);
                try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
             
            }
        }
    }

}

edit code berichtigt
 
Zuletzt bearbeitet:
Was meinst du mit „auf den Thread zugreifen“? Mit nem Thread kann man ja nicht allzu viel sinnvolles tun



Wenn es static ist, ist es keine Instanzvariable mehr 🙂
wenn dir die Begrifflichkeit Klassenvariable lieber ist ok.
Das ist ja nicht das Thema.



Ich möchte nach dem Handy drehen zb. Prüfen können ob der Thread noch läuft.
Mit static (KlassenVariablen) geht es klar.

Wenn es eine Instanzvariable ist nicht. Da wird auch der Thread nach dem Drehen neu gestartet da ja die Instanzvariable Null ist.

Ich möchte zb nach dem Handy drehen den Thread auch von außen beenden können dazu brauche ich aber die Instanz des Threads.
Die Instanzvariablen zeigt nach dem drehen nicht mehrer auf den Thread.

Wie finde ich die Instanz des Threads nach dem drehen.

Bzw. was muss oder kann ich dem Thread mit geben damit ich ihn finden kann?
und wie mache ich das?
 
Das ist immer das Gleiche: Du musst einfach die Daten an entsprechender Stelle merken.

Prinzipiell ist die static Lösung schon ok. Wenn Du es nicht als static haben willst, könntest Du es an einen Ort packen, der unverändert bleiben dürfte. Das wäre z.B. die Application Instanz, auf die Du per getApplication() zugreifen könntest.

Aber hier ist natürlich immer darauf zu achten, dass eine Applikation von Android jederzeit gekillt und dann wieder neu gestartet werden könnte. Daher nicht darauf verlassen, dass so Daten gesetzt sind.

Siehe z.B. http://www.developerphil.com/dont-store-data-in-the-application-object/
 
Das ist immer das Gleiche: Du musst einfach die Daten an entsprechender Stelle merken.

Prinzipiell ist die static Lösung schon ok. Wenn Du es nicht als static haben willst, könntest Du es an einen Ort packen, der unverändert bleiben dürfte. Das wäre z.B. die Application Instanz, auf die Du per getApplication() zugreifen könntest.

Aber hier ist natürlich immer darauf zu achten, dass eine Applikation von Android jederzeit gekillt und dann wieder neu gestartet werden könnte. Daher nicht darauf verlassen, dass so Daten gesetzt sind.

Siehe z.B. http://www.developerphil.com/dont-store-data-in-the-application-object/
Ja Singleton, ViewModle sind Möglichkeiten die ich nicht nutzen wollte.
Hatte gehofft hier eine bessere Lösung zu finden.

das mit dem getApplicationContext() und dem Thread einen namen geben könnte gehen.
nur wie genau würde ich nach dem namen suchen. Um an die Instanz zu kommen?

Na gut ich werde es bei Gelegenheit mal testen. Das war oder ist mehr eine prinzipielle Frage für mich.

Danke für die Antworten.
 
Zuletzt bearbeitet:
Die App und somit der Prozess wird ja nicht beendet.
Erst wenn der Prozess in dem die App läuft beendet wird würde ein noch laufender Thread beendet werden.
 
Die App und somit der Prozess wird ja nicht beendet.
Erst wenn der Prozess in dem die App läuft beendet wird würde ein noch laufender Thread beendet werden.
Du hast recht, die Activity wird zerstört, nicht die App.


 
Du hast recht, die Activity wird zerstört, nicht die App.



Den link kenne ich. Das InstanceState hilft mir nicht, dort werden nur die Values der Variablen gespeichert nicht die Instanz.
 

Zurück
Oben