2012-08-07 42 views
1

我有一個SurfaceView線程的問題。當我鎖定手機時,我無法理解onPause/onResume。無論我做什麼,鎖定/解鎖手機後線程都不會響應。Android Surfaceview線程無響應

在活動:

@Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     surfaceView.SurfaceView_OnResume(); 
    } 

    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     surfaceView.SurfaceView_OnPause(); 

    } 

在surfaceview

public void SurfaceView_OnResume() { 
      if (null != surfaceViewThread) { 

       surfaceViewThread.setRunning(true); 
       surfaceViewThread.notify(); 
      } 

     } 

     public void MySurfaceView_OnPause() {   
      surfaceViewThread.setRunning(false); 

     } 

@Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 
     boolean retry = true; 
     myGameThread.setRunning(false); 
     while (retry) { 
      try { 
       myGameThread.join(); 
       retry = false; 
      } catch (InterruptedException e) { 
      } 
     } 
    } 

在線程:

public void setRunning(boolean run) { 
     runFlag = run; 

    } 
+1

給我們一些代碼請= = – AMerle 2012-08-07 08:30:27

+0

和沒有人告訴任何東西 – 2012-08-07 09:28:54

回答

0

Thread.setRunning(布爾b)並非在Android的API中。 你可以在這裏查看。 http://developer.android.com/reference/java/lang/Thread.html

如果我需要一個線程,我更喜歡使用Runnable(接口),而不是線程(對象)。

爲了控制我的線程週期,我會設計我的方法:運行()這樣的...

run(){ 
    while(threadRun){ 
      ...//What you want to do in the thread. 
      while(threadPause){ 
      } 
    } 
} 

布爾:threadRun會變成假的Activity.onDestroy(),或者任何其他時間你真的想關閉線程。

Boolean:threadPause ...在Activity.onPause()中轉爲false,在Activity.onResume()中轉爲true。