Verständnis wegen Threading

  • 2 Antworten
  • Letztes Antwortdatum
M

Madlip

Gast
Hallo Community,ich hab da nun mal eine grundlegende Frage. Es geht um die Thread geschichte in Android, ich war irgendwie der Meinung das es besser ist, wenn man DB zugriffe macht, einen Thread zu benutzen.

Das sieht dann bei mir wie folgt aus: ich hab eine onCreate Methode in der ich zunächste meine ganzen Variablen deklariere und initalisiere. dann kommt eine Methode initalisiereDaten und dann die zuweisung.

das könnte wie folgt ausschauen (sorry irgendwie kann ich das CODE Tag nicht mehr benutzen):

OnCreate()test = (TextView) findViewbyId(r.id.bla)

initalisiereDaten()test.setText(ErgebnisAusInitalisiereDaten);

das ist im groben meine onCreate Methode, nun zu der nächsten:

public void initalisiereDaten()
Try {
New Thread(){
public void run(){
uiHandler.post(new Runnable(){
{
@Override
public void run(){
Sqlstatement = select * from test;
ErgebnisAusInitalisiereDaten = "Test";
Try{
datenbankzeugs
}catch{
}
}
}
});
}
}.start();
}catch{
}
}

dabei ist mir nun aufgefallen das er diese public void run Methode in meiner initalisiere Methode zu letzt ausführt.

Woran liegt das? Ist das so gewollt, oder ist das vielleicht ein Fehler bei mir? Muss ich wenn ich zu Beginn einer Activity Daten initalisieren will so einen Handler haben? Hab ich alternativen???Wäre nett wenn mich da mal jemand aufklären könnte.

Gruß
Mad

Und bitte entschuldigt das ich es nicht in dieses CODE Tag geschrieben hab aber irgendwie gehen die bei mir nicht, ich weiß nicht ob es daran liegt weil ich gezwungener Maßen mit dem IE ins Internet muss ...

EDIT: Hab es mal getestet es liegt am verdammten IE ... so ein Drecksbrowser, der haut mir die ganze Formatierung weg ... naja ein hoch auf Hotspot funktion beim Handy und ein glück das das notebook dabei ist ...
 
Zuletzt bearbeitet:
Hat keiner ein bisschen Input?


Sent from my iPhone using Tapatalk
 
Madlip schrieb:
dabei ist mir nun aufgefallen das er diese public void run Methode in meiner initalisiere Methode zu letzt ausführt.

Woran liegt das? Ist das so gewollt, oder ist das vielleicht ein Fehler bei mir?

Die Methode wird in dem Moment ausgeführt, wo der Thread mit start() angestoßen wird. In dem Codebeispiel ist das das letzte, was in initialisiereDaten() passiert.

Madlip schrieb:
Muss ich wenn ich zu Beginn einer Activity Daten initalisieren will so einen Handler haben? Hab ich alternativen???

Nein. Du kannst die Initialisierung auch direkt stattfinden lassen, dann läuft die halt im selben Thread. Das ist allerdings derselbe Thread, in dem auch der ganze Rest der Benutzeroberfläche abläuft - soll heißen, solange da irgendwas initialisiert wird steht die App aus Sicht des Nutzers komplett. Daher sollte alles in einem anderen Thread ablaufen, was lange genug dauert, um den UI-Thread merklich zu blockieren. (Übrigens nicht nur bei der Initialisierung.)
 
  • Danke
Reaktionen: Madlip
Zurück
Oben Unten