2012-05-08 2 views
0

Я использую «Gameview» contentView он расширяет SurfaceView и я использую нитку, чтобы иметь постоянный цикл для моей игры, метод мой OnCreate() являетсяМой андроид сбой приложения на второй раз я открываю его

public class mainclass extends Activity { 
GameView game; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    game = new GameView(this); 
    setContentView(game); 
} 

аварии LogCat является

05-09 09:35:06.378: W/dalvikvm(9664): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
05-09 09:35:06.388: E/AndroidRuntime(9664): FATAL EXCEPTION: main 
05-09 09:35:06.388: E/AndroidRuntime(9664): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:460) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:359) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:385) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at superBill.Mbiz.Egypt.GameView.<init>(GameView.java:87) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at superBill.Mbiz.Egypt.SuperBillActivity.onCreate(SuperBillActivity.java:20) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at android.os.Looper.loop(Looper.java:130) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at java.lang.reflect.Method.invoke(Method.java:507) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-09 09:35:06.388: E/AndroidRuntime(9664):  at dalvik.system.NativeStart.main(Native Method) 

Примечание: этот сбой происходит во второй раз, но третий один в порядке, четвертый аварии, пять нормально и так далее.

+0

Предоставьте несколько журналов, пожалуйста, –

+0

Я предполагаю, что авария находится где-то в вашем классе GameView. Отправьте logcat и класс GameView, чтобы мы могли лучше понять, что не так – dymmeh

+0

@dymmeh: Я разместил его, достаточно ли этого? –

ответ

0

@dymmeh: Мой код был

@Override 
      public void surfaceDestroyed(SurfaceHolder holder) 
     { 
      boolean retry = true; 
      mythread.setRunning(false); 
      while (retry) { 

        try { 
          mythread.join(); 
          retry = false; 
         } catch (InterruptedException e) { 
        } 
      } 
    } 

и что, что послужило причиной того, что вы сказали, я заменил его

@Override 
      public void surfaceDestroyed(SurfaceHolder holder) 
     { 
      mythread.setRunning(false); 
      System.exit(0); 
     } 

сейчас, все идет хорошо, благодаря!

1

В вашем методе CoverSreated для вашего GameView вам нужно воссоздать gamethread, так как вы, вероятно, позволите ему умереть с помощью gamethread.join() в методе surfaceDestroyed. Что-то вроде этого:

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    if (gamethread.getState() == Thread.State.TERMINATED) { 
     gamethread = new GameThread(getHolder(), this); 
     gamethread.setRunning(true); 
     gamethread.start(); 
    } else if (gamethread.getState() == Thread.State.NEW) { 
     gamethread.setRunning(true); 
     gamethread.start(); 
    } 
} 
+0

Это мой код: 'SurfaceHolder mySurfaceHolder; mySurfaceHolder = getHolder(); mySurfaceHolder.addCallback (новый обратный вызов() { @Override общественности недействительным surfaceDestroyed (держатель SurfaceHolder) { булево повторов = истина; mythread.setRunning (ложь), в то время как (повторить) { попробовать { mythread.join(); повторных попыток = ложь; } задвижка (InterruptedException е) {} }} \t @Override \t общественного недействительными surfaceCreated (держатель SurfaceHolder) \t \t \t { \t \t \t \t mythread.setRunning (истина); \t \t \t \t mythread.Начало(); \t \t \t} ' –

Смежные вопросы