Sleep verwenden in meiner Anwendung

K

korndi

Neues Mitglied
3
Hallo!!

Ich suche einen Entwickler der mir kurz helfen kann bei einem Sleep... Ich bekomme es nie hin, da sich meist meine Anwendung aufhängt..

mit freundlichen grüßen

Ps: Skypekontakt: popp-korn
 
? Codesnippet?
 
public void onItemClick(AdapterView<?> arg0, View v, int item, long id) {

SelectedItem = tmp[item];
//Thread thread = new Thread(new Timer());
//thread.start();
while (true)
{
Handler handler = new Handler();
try {
handler.wait(2000);
MainView();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


}
});


public void MainView ()
{
ll.removeAllViews();
setContentView(ll);

TextView tv = new TextView(getApplicationContext());
tv.setGravity(Gravity.CENTER_HORIZONTAL);
tv.setTextSize(30);
TextView tv3 = new TextView(getApplicationContext());
tv3.setGravity(Gravity.CENTER_HORIZONTAL);
tv3.setTextSize(30);
tv3.setTextColor(Color.RED);
tv.setText("Your Seleceted TV Channel is:");
tv3.setText(SelectedItem+"\n");
ll.addView(tv);
ll.addView(tv3);
}
 
korndi schrieb:
while (true)
{
Handler handler = new Handler();
try {
handler.wait(2000);
MainView();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
Kein Wunder, dass die App nicht mehr funktioniert. Du hast ja auch eine explizite Endlosschleife in deiner Anwendung...
 
Erzähl einfach, was du beabsichtigst ( eine endlose Schleife und warten in
dem GUI-Thread sind sicherlich nicht das was du vorhast - wenn doch, dann hat es ja funktioniert ;) )
 
Danke.. Für die antworten.. Also ich habe eine view in einer funktion. Die ich mit einem button aufrufe. Deshalb will ich eine endlosschleife ( die beabsichtigt ist) die di view alle 10 sek neu aufruft, da ich dort infos von einer db über php und webrequest abrufe. Mfg korndi
 
Aber deine GUI blockiert bei der Endlosschleife. Dementsprechend ist die App nicht zu benutzen.
Wenn du da alle 10 Sekunden pollen möchtest, dann starte einen neuen Thread (sollte man sowieso bei webrequests, sonst kann es bei einem Timeout auch dazu führen, dass du eine ANR kriegst), erstelle dir einen Handler und mache alle 10 Sekunden dort eine Abfrage.
Im GUI Thread brauchst du dann noch einen Handler, der benachrichtigt wird bei Updates. Und bau um Himmels willen nicht jedesmal den View komplett neu auf. Das verbraucht Rechenzeit und Akku und bringt keinen Vorteil.
 
the_alien schrieb:
Im GUI Thread brauchst du dann noch einen Handler, der benachrichtigt wird bei Updates.

rrunOnUiThread() wurde auch reichen...
 
the_alien schrieb:
Aber deine GUI blockiert bei der Endlosschleife. Dementsprechend ist die App nicht zu benutzen.
Wenn du da alle 10 Sekunden pollen möchtest, dann starte einen neuen Thread (sollte man sowieso bei webrequests, sonst kann es bei einem Timeout auch dazu führen, dass du eine ANR kriegst), erstelle dir einen Handler und mache alle 10 Sekunden dort eine Abfrage.
Im GUI Thread brauchst du dann noch einen Handler, der benachrichtigt wird bei Updates. Und bau um Himmels willen nicht jedesmal den View komplett neu auf. Das verbraucht Rechenzeit und Akku und bringt keinen Vorteil.

Danke für die antwort. Ich habe es schon probiert aber ich schaffe es einfach nicht.. Kann ich dir mein projekt senden? ich programmier normalerweiß nur in c# und normales java
 
Poste hier doch mal den Ausschnitt der nicht funktioniert. Dann bin nicht nur ich da um zu helfen.
 
Gibt es in C# und normalen Java keine mehrschichtige Architektur? ;)
Starte im onCreate() einen Worker Thread, erstelle in dem Thread einen Handler und speichere diesen als Objektvariable.
Dann kannst du in deinen onClickListenern einfach sowas machen:
Code:
{
handler.post(new Runnable() {
public void run() {
    final String result = getData("blah");
    ActivityClass.this.runOnUi(new Runnable() {
        public void run() {
            com = result;
            updateView();
        }
    }
}
Damit blockiert der Aufruf nicht mehr die GUI.
 
sorry aber was ist ein worker thread?

Ich möchte einfach die updateview alle 10 s aufrufen.. kan mir jemand die zeilen code antworten. Mit threads habe ich noch nie was gemacht...
 
Code:
Thread worker = new Thread() {
private Handler handler;
public void run() {
handler = new Handler();
}
public void post(Runnable r) {
handler.post(r);
}
}

Wenn du handler im Beispiel oben ersetzt durch "worker" wird das so gehen.
 

Ähnliche Themen

B
Antworten
6
Aufrufe
1.051
jogimuc
J
Jansenwilson
Antworten
1
Aufrufe
760
swa00
swa00
M
  • MikelKatzengreis
Antworten
10
Aufrufe
223
swa00
swa00
Zurück
Oben Unten