Java Android Thread Problem

thepro1

Lt. Junior Grade
Registriert
Apr. 2008
Beiträge
411
Hallo liebe Community,

ich habe ein Problem mit meinem Thread.
Intro:
Der Thread hat die Funktion Daten aus dem inet abzurufen und dann das
Ergebnis an das GUI zu übergeben. Immer wenn ich den Thread anstoße mache ich es über die unten implementierte Methode: aktualisiereBlitzer().
Problem:
Wenn ich den Thread ein weiteres mal aufrufe obwohl er gerade arbeitet, stürzt das Programm ab. Ich möchte also, dass er nicht erneut gestartet wird, wenn er bereits läuft und das würde ich gerne in dieser Methode erledigen.

Hat jemand eine Idee ? :)


Code:
	private BlitzerTask blTask;

	public void aktualisiereBlitzer(){
		if(blTask == null){
			blTask = new BlitzerTask();
		}
		if(blTask.getStatus() != Status.RUNNING){
			blTask = new BlitzerTask();
			blTask.execute();
		}
	}
 
Code:
private BlitzerTask blTask;
 
	public void aktualisiereBlitzer(){
		if(blTask == null){
			blTask = new BlitzerTask();
		}
		if(blTask.getStatus() != Status.RUNNING){
			[COLOR="Red"][B]blTask = new BlitzerTask();[/B][/COLOR]
			blTask.execute();
		}
	}

hab mal die stelle makiert wo ich denke dass es der grund ist warum es crashed

du könntest auch einfach mal debugen und schaun mit welcher exception er crashed
 
Zuletzt bearbeitet:
@Xetoxyc
danke für deine Antwort, mit dem Debuggen werde ich irgendwie nicht so ganz froh, muss ich noch weiter ausprobieren, aber danke :)

@Shagg
danke, werde ich mir mal anschauen :)
 
wobei wenn ichs mir so recht überlege sollte da kein fehler auftreten ...
rien von der überlegung...
weis nur leider nicht wie auf die threads intern reagiert wird wenn sie z.b. gestopt bzw pausiert wurden und man sie dann neu erzeugt...
 
Also, mal vorweg, von Java hab ich mehr oder weniger keine Ahnung, daher kann ich dir keinen Code geben, um dein Problem zu lösen.

Für mich sieht das ganze so aus, als würde eine der zwei Bedingung in der Methode aktualisiereBlitzer() immer erfüllt sein. Das führt dann dazu, dass der Garbage Collector die alte Referenz einsammelt, während der erste (oder x-te) Thread noch damit arbeitet.

Was du brauchst ist kein Singleton, sondern Synchronisation zwischen den Threads.
Auf die schnelle hab ich das hier gefunden.
 
Ich bin schon mal einen Schritt weiter gekommen, das Problem liegt darin, dass 2 "Threads" versuchen auf die GUI zuzugreifen :(

So ich habe das Problem:
Lösung
Wenn man das Gerät kippt, zerstört Android die Activity und erstellt eine neue, der Thread möchte aber noch auf die alte zugreifen....
 
Zuletzt bearbeitet: (Problem gelöst :))
vielleicht hilft dir das hier:
http://developer.android.com/guide/topics/resources/runtime-changes.html

du kannst beim activity destroy dein thread manuell beenden und deine daten speichern, und onRestart überprüfen ob irgendwelche daten vorliegen, und wenn ja, den thread new starten und weiter arbeiten.

oder villeicht hilft ein einfaches

<activity android:name=".BaseActivity" android:configChanges="orientation"/>

in manifest.xml.
hier ein link dazu
http://zaman91.wordpress.com/2010/12/05/android-how-to-handle-screen-orientation-change/
 
Zurück
Oben