2011-07-25 44 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