2011-07-25 42 views
2

我正在使用處理程序發佈延遲的Runnable來更新我的遊戲。Android中的鎖屏加速遊戲

public class Example implements Runnable 
{ 
    Handler handler; 
    public Example() 
    { 
    handler = new Handler(); 
    handler.postDelayed(this,10); 
    } 
    public void run() 
    { 
    handler.postDelayed(this,10); 
    } 
} 

每當我按下鎖定屏幕按鈕,然後恢復遊戲,它運行得比它應該快得多。每次我鎖定屏幕並恢復時,它運行得越來越快。但是,如果我重新啓動活動或完成並重新打開該活動,它將以正常速度再次運行。請幫助。 在此先感謝。

回答

3

什麼似乎在發生是每次你鎖定你的屏幕,然後恢復它在另一個RunnableRunnable的頂部你已經有雙倍的運行,從而使線程越來越快,每次都需要以某種方式暫停你的線程類似於thread.sleep()或類似的東西當你鎖定你的屏幕,所以當你恢復你沒有重新創建一個新的Runnable,而是從你的線程中停止的地方開始。

如果您使用onCreate方法創建新的Runnable。無論何時電話被轉動,或電話恢復時,它都會被叫醒,這就是爲什麼你可能會遇到這個問題。之所以沒有發生在您的活動或關閉您的應用程序之後finish()是因爲當您重新啓動應用程序時,該Runnable將被創建一次,直到您開始鎖定手機並重新開始等。

您可能也想看看,你可以用它來幫助處理您的線程的內部類:

public class YourClass extends Activity { 

    public void yourUpdateMethod() { 
     runOnUiThread(new Runnable() { 
      public void run() { 
       new YourUpdateClass().execute(0, null, null); 
      } 
     }); 
    } 

    private class YourUpdateClass extends AsyncTask<Integer, Void, Void> { 


      @Override 
      protected synchronized Void doInBackground(Integer... index) { 
       return null; 
      } 

      @Override 
      protected synchronized void onPostExecute(Void result) { 
       //your statements here 
      } 
    } 
} 

這可能有助於處理有被暫停/重新啓動線程/恢復或任何好一點。更多的信息在這裏:http://developer.android.com/reference/android/os/AsyncTask.html

不知道如何在遊戲中工作,但沒有玩弄。

祝你好運,希望這會有所幫助。

+0

非常感謝!會讓線程在onPause中睡眠並恢復onResume修復這個問題? – GuyWhoNeedsHelp

+0

沒問題!這聽起來很合乎邏輯。試試看,希望能解決它。很高興我可以得到一些幫助。 – Wolfcow

+0

你是否能夠得到它的工作? – Wolfcow