1

onPause が発生してもスレッドが停止せず、2 つのスレッド インスタンスを実行できないため、「スレッドは既に開始されています」という logcat エラー onResume が発生します。この時点でスレッドを終了するにはどうすればよいですか? 私は次のようなことをする必要があると信じています:

gameLoopThread.setRunning(false);

しかし、それを私の balloonBasic onPause に追加することはできません。コンテキストが間違っていると思います。助けてください、コードは以下に表示されます。(コード例は本当に役に立ちます、ありがとう)

私の活動:

public class balloonBasic extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(new GameViewBasic(this));
}

public void onResume() {
    super.onResume();
    SoundManager.getInstance();
    SoundManager.initSounds(this);
    SoundManager.loadSounds();
    }

public void onPause() {
    super.onPause();
    //what do I put here?
}
}

私のサーフェスビュー:

public class GameViewBasic extends SurfaceView {

...abbreviated declarations...
private static SurfaceHolder holder;
private static GameLoopThreadBasic gameLoopThread;

   public GameViewBasic(Context context) {
         super(context);
         gameLoopThread = new GameLoopThreadBasic(this);
         holder = getHolder();
         holder.addCallback(new Callback() {



                public void surfaceDestroyed(SurfaceHolder holder) 
                {
                    gameLoopThread.setRunning(false);
                }


                public void surfaceCreated(SurfaceHolder holder) {

                       createSprites();
                       mapspritegraphics();

                       gameLoopThread.setRunning(true);
                       gameLoopThread.start();

                }

                public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 
                {
                }
         });
   }
...abbreviated for brevity....

私のスレッド: public class GameLoopThreadBasic extends Thread { private GameViewBasic view; プライベート揮発性ブール値実行中 = false;

   public GameLoopThreadBasic(GameViewBasic gameViewBasic) {
         this.view = gameViewBasic;
   }
   public void setRunning(boolean run) {
         running = run;
   }

   @Override
   public void run() {
         long ticksPS = 25; // =(1000/fps) ie 25ticksPS = 40fps
         long startTime;
         long sleepTime;

         while (running) {
                Canvas c = null;
                startTime = System.currentTimeMillis();
                try {
                       c = view.getHolder().lockCanvas();
                       synchronized (view.getHolder()) {
                              view.onDraw(c);
                       } 

                } catch (Exception f) {} //
                finally {
                       if (c != null) {
                              view.getHolder().unlockCanvasAndPost(c);
                       }
                } 
                sleepTime = (ticksPS - (System.currentTimeMillis() - startTime));
                try {
                       if (sleepTime > 0)
                              sleep(sleepTime);
                       else
                              sleep(10);
                } catch (Exception e) {}
         }
   }
}
4

1 に答える 1