android - Back to SurfaceView from other activity -
im making game aim kill zombies, , upgrade weapons.but have problem, when im trying pause game , go shop, have no problem when im trying game - application crash. here code:
public gameview(context context) { super(context); gameloopthread = new gameloopthread(this); getholder().addcallback(new surfaceholder.callback() { @override public void surfacedestroyed(surfaceholder holder) { boolean retry = true; gameloopthread.setrunning(false); while (retry) { try { gameloopthread.join(); retry = false; } catch (interruptedexception e) {} } } @override public void surfacecreated(surfaceholder holder) { //createsprites(); gameloopthread.setrunning(true); gameloopthread.start(); thread1.start(); thread_level.start(); wielkosc_czcionki=getwidth()/25; } @override public void surfacechanged(surfaceholder holder, int format, int width, int height) { } }); @suppresswarnings("deprecation") void pause(){ if (!is_game) // not running { paused=!paused; is_game=!is_game; } else{ // running is_game=!is_game; paused=!paused; startuj_sklep(); //startuj_sklep(); } } thread thread_level = new thread(){ public void run(){ while(true){ if(akt_zabit%(int)level_zabit==0){ level++; level_zabit=level_zabit*1.5; resp_time=resp_time-20; pause(); } } } }; void startuj_sklep(){ context context = getcontext(); // mysurfaceview/activity intent intent = new intent(context, sklep.class); int tab[]={dolary,zycie_gracza_akt,zycie_gracza_def,poj_mag,szybkosc_strzalu, reload_time_def}; intent.putextra("dane", tab); context.startactivity(intent); } so "pause" method making whole game stopped , using "startuj_sklep"(engish: start_shop). "startuj_sklep" method starts new activity. , turning new activity, when crash.
back.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { finish(); } }); 05-14 15:48:52.031: e/androidruntime(1272): fatal exception: main 05-14 15:48:52.031: e/androidruntime(1272): java.lang.illegalthreadstateexception: thread started 05-14 15:48:52.031: e/androidruntime(1272): @ java.lang.thread.checknotstarted(thread.java:871) 05-14 15:48:52.031: e/androidruntime(1272): @ java.lang.thread.start(thread.java:1025) 05-14 15:48:52.031: e/androidruntime(1272): @ morisson.zombieapocalypse.gameview$3.surfacecreated(gameview.java:149) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.surfaceview.updatewindow(surfaceview.java:571) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.surfaceview.onwindowvisibilitychanged(surfaceview.java:232) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.view.dispatchwindowvisibilitychanged(view.java:7682) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.viewgroup.dispatchwindowvisibilitychanged(viewgroup.java:1071) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.viewgroup.dispatchwindowvisibilitychanged(viewgroup.java:1071) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.viewgroup.dispatchwindowvisibilitychanged(viewgroup.java:1071) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.viewrootimpl.performtraversals(viewrootimpl.java:1227) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.viewrootimpl.dotraversal(viewrootimpl.java:1004) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.viewrootimpl$traversalrunnable.run(viewrootimpl.java:5481) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.choreographer$callbackrecord.run(choreographer.java:749) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.choreographer.docallbacks(choreographer.java:562) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.choreographer.doframe(choreographer.java:532) 05-14 15:48:52.031: e/androidruntime(1272): @ android.view.choreographer$framedisplayeventreceiver.run(choreographer.java:735) 05-14 15:48:52.031: e/androidruntime(1272): @ android.os.handler.handlecallback(handler.java:730) 05-14 15:48:52.031: e/androidruntime(1272): @ android.os.handler.dispatchmessage(handler.java:92) 05-14 15:48:52.031: e/androidruntime(1272): @ android.os.looper.loop(looper.java:137) 05-14 15:48:52.031: e/androidruntime(1272): @ android.app.activitythread.main(activitythread.java:5103) 05-14 15:48:52.031: e/androidruntime(1272): @ java.lang.reflect.method.invokenative(native method) 05-14 15:48:52.031: e/androidruntime(1272): @ java.lang.reflect.method.invoke(method.java:525) 05-14 15:48:52.031: e/androidruntime(1272): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:737) 05-14 15:48:52.031: e/androidruntime(1272): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:553) 05-14 15:48:52.031: e/androidruntime(1272): @ dalvik.system.nativestart.main(native method)
the surfacecreated() callback in anonymous class in gameview attempting start thread running, you're getting
java.lang.illegalthreadstateexception: thread started add logging see when callbacks firing , when thread starting , stopping. give better sense of how app interacting system.
you may find this article of interest.
(i don't know if it's part of problem, recommend against making pause() method act toggle. should know whether call pause() expected pause or resume, , writing toggle creates unnecessary ambiguity. if game paused, , try pause second time, should ignore second request or report error, not try resume it.)
Comments
Post a Comment