# Android zugrif auf Thread nach Handy drehen.



## Jw456 (9. Aug 2021)

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.


```
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


----------



## mrBrown (9. Aug 2021)

Was meinst du mit „auf den Thread zugreifen“? Mit nem Thread kann man ja nicht allzu viel sinnvolles tun




Jw456 hat gesagt.:


> static Instanzvariable


Wenn es static ist, ist es keine Instanzvariable mehr


----------



## Jw456 (9. Aug 2021)

mrBrown hat gesagt.:


> 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?


----------



## kneitzel (9. Aug 2021)

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/


----------



## Jw456 (9. Aug 2021)

kneitzel hat gesagt.:


> 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.
> 
> ...


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.


----------



## Barista (10. Aug 2021)

Nach meinem Wissen wird in Android die App beim Drehen beendet und neu gestartet.

Da läuft kein Thread mehr.


----------



## Jw456 (10. Aug 2021)

Barista hat gesagt.:


> Nach meinem Wissen wird in Android die App beim Drehen beendet und neu gestartet.
> 
> Da läuft kein Thread mehr.


Doch der Thread läuft weiter.


----------



## Jw456 (10. Aug 2021)

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.


----------



## Barista (10. Aug 2021)

Jw456 hat gesagt.:


> 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.









						Programmier Tutorial: Apps für Android entwickeln – Teil 28: Den Zustand von Activities in Android speichern und laden
					

In der onRestoreInstanceState() Methode werden wir aus diesem Bundle-Objekt die gespeicherten Daten wieder auslesen und mit ihnen die Datenquelle unseres ListViews füllen. Auf diese Weise können wir die ListView-Einträge wiederherstellen, nachdem die Activity vom Android…




					www.programmierenlernenhq.de
				






			android drehen activity - Google Suche


----------



## Jw456 (10. Aug 2021)

Barista hat gesagt.:


> 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.


----------



## Barista (10. Aug 2021)

Ich habe jetzt keine Android-IDE auf dem Rechner, kann es also nicht ausprobieren.

In nicht-Android-Java kann man sich alle Threads geben lassen:



			https://www.codejava.net/java-core/concurrency/how-to-list-all-threads-currently-running-in-java
		


Dem Thread einen signifikanten Namen geben und in den Threads danach suchen klappt hoffentlich.


----------

