Thread - Intent Problem

  • Hallöchen Leute! :)


    Also, kurz zur "Struktur" meines Projektes: Ich habe momentan lediglich eine Klasse, in der eine activity läuft. Habe zwar einige Objekte auch als extra klasse angelegt, aber wie gesagt gibt es im Spiel (trotz Menü, dem Spiel an sich,...) nur eine activity.


    Da ich das nun ändern möchte, u.a. damit man um nur eine "stufe zurück" kommt, wenn man auf die zurück Taste drückt, stehe ich vor einem Problem. Jetzt habe ich zum Testen die selbe Klasse genommen, was auch funktioniert, bis ich die zurück Taste drücke - danach stürzt es ab. Der code, wie die Activiy gestartet wird:




    Nun, bezüglich dem Thread, ich habe selbst noch nie einen Thread komplett eigenhändig auf die Reihe gestellt, das habe ich aus einem Tutorial, weiß nur leider überhaupt nicht mehr von welchem. (Erst dachte ich das wäre von TheNewBoston, da habe ich auch einige Basis Elemente gelernt, aber dort wurde das Thema gar nicht so genau behandelt)
    Zum Thread:





    Meine Vermutung ist, dass dieser Thread, soweit er von etwas anderem unterbrochen wird (egal ob anruf etc. --> was auch zu einem Absturz bei mir führt), pausiert werden muss. habe auch schon einiges rumgeguckt und probiert, jedoch leider erfolglos :(


    Daher meine Frage: Gibt es so etwas, damit man den Thread pausieren kann?


    Nochmal kurz zum Aufbau meines Spieles (public class Aktiv extends SurfaceView implements Runnable, Callback): Bei den "großen" voids wie etwa run(), onDraw(), onTouchEvent() habe ich je nachdem, was geöffnet ist, eine Abfrage erstellt und somit einen künstlichen Wechsel zwischen Start - Menü und Spiel erstellt. Ich habe leider noch nie einen "richtigen" aufbau eines solchen Spieles gesehen, daher habe ich meine eigene Strategie entwickelt... Wäre nett wenn mich hierbei jemand ausbessern kann :)



    Vielen Danke für eure Antworten! :)
    MfG


    PS: Sorry für die nicht Einrückung des Codes, als ich es versucht habe den Code mit [code] zu formatieren waren keine Leerzeilen dabei, mit einem Zitat funktioniert das aber :)

  • Da du Java-Code formatierst, solltest du auch

    Java
    [code=java]

    nehmen. ;)
    Zumindest klappt da erfahrungsgemäß die Sache mit dem Einrücken.


    Was sagt denn das Log bezüglich deines Absturzes?
    Ich habe die Erfahrung gemacht, dass eine Activity sich ungern aus einem anderen als dem MainThread starten lässt.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Da du Java-Code formatierst, solltest du auch

    Java
    [code=java]

    nehmen. ;)
    Zumindest klappt da erfahrungsgemäß die Sache mit dem Einrücken.


    Was sagt denn das Log bezüglich deines Absturzes?
    Ich habe die Erfahrung gemacht, dass eine Activity sich ungern aus einem anderen als dem MainThread starten lässt.


    Ah ok, das war mir noch nicht bekannt.. :)
    Achso genau, völlig vergessen :P
    Der spuckt da einiges raus...


    Zitat

    01-03 11:37:18.610: E/AndroidRuntime(2008): FATAL EXCEPTION: main01-03 11:37:18.610: E/AndroidRuntime(2008): java.lang.IllegalThreadStateException: Thread already started.01-03 11:37:18.610: E/AndroidRuntime(2008): at java.lang.Thread.start(Thread.java:1045)01-03 11:37:18.610: E/AndroidRuntime(2008): at com.salmii.asdf.Game$Aktiv.surfaceCreated(Game.java:1156)01-03 11:37:18.610: E/AndroidRuntime(2008): at android.view.SurfaceView.updateWindow(SurfaceView.java:576)01-03 11:37:18.610: E/AndroidRuntime(2008): at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:226)01-03 11:37:18.610: E/AndroidRuntime(2008): at android.view.View.dispatchWindowVisibilityChanged(View.java:6015)01-03 11:37:18.610: E/AndroidRuntime(2008): at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:946)01-03 11:37:18.610: E/AndroidRuntime(2008): at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:946)01-03 11:37:18.610: E/AndroidRuntime(2008): at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:946)01-03 11:37:18.610: E/AndroidRuntime(2008): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1141)01-03 11:37:18.610: E/AndroidRuntime(2008): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2628)01-03 11:37:18.610: E/AndroidRuntime(2008): at android.os.Handler.dispatchMessage(Handler.java:99)01-03 11:37:18.610: E/AndroidRuntime(2008): at android.os.Looper.loop(Looper.java:137)01-03 11:37:18.610: E/AndroidRuntime(2008): at android.app.ActivityThread.main(ActivityThread.java:4511)01-03 11:37:18.610: E/AndroidRuntime(2008): at java.lang.reflect.Method.invokeNative(Native Method)01-03 11:37:18.610: E/AndroidRuntime(2008): at java.lang.reflect.Method.invoke(Method.java:511)01-03 11:37:18.610: E/AndroidRuntime(2008): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)01-03 11:37:18.610: E/AndroidRuntime(2008):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)01-03 11:37:18.610: E/AndroidRuntime(2008): at dalvik.system.NativeStart.main(Native Method)

  • Okay, das sieht so aus, als läge das Problem nicht bei den von dir gezeigten Codezeilen.


    Er steigt aus beim sinngemäßen Aufruf von

    Java
    gameThread.start();


    Da dein GameThread bereits $irgendwo existiert und läuft, kannst du ihm kein .start() senden.
    Das geht nur, wenn sein ThreadState auf 'NEW' steht. Selbst beim Pausieren steht er gemäß StackOverflow auf 'RUNNABLE' oder 'WAITING'.


    Seit einem geringen API Level (1!) gibt es die Möglichkeiten zum Anhalten und Fortführen eines Threads nicht mehr, war wohl zu unsicher.


    Leider habe ich keine Ahnung von Spieleentwicklung (und mag Threads auch nicht besonders), so dass ich dir hier leider nicht weiterhelfen kann. -.-

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Trotzdem danke für deine Hilfe! :)


    Für alle, die an diesem oder einen ähnlichen Problem stehen: Ich habe soeben einen zwar leider unbekannten aber anscheinend sehr organisierten Youtuber gefunden, welcher Tutorials (in diesem Fall Android Spiele Tutorials) macht und zusätzlich alles noch einmal auf seiner Homepage erklärt:


    http://panjutorials.de/tutoria…ngstutorial-lazy-pudding/



    Ich werde mir wohl das ganze Tutorial ansehen, da ich bestimmt auch einige AHA Effekte erleben werde, selbst wenn mir dort bestimmt einiges schon ziemlich bekannt vorkommen wird. :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!