2

我正在使用发布延迟 Runnable 的处理程序更新我的游戏。

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

每当我按下锁定屏幕按钮然后恢复游戏时,它的运行速度比预期的要快得多。每次我锁定屏幕并恢复时,它运行的速度越来越快。但是,如果我重新启动活动或完成然后重新打开活动,它会再次以正常速度运行。请帮忙。提前致谢。

4

1 回答 1

3

似乎正在发生的事情是每次您锁定屏幕然后恢复它时,它会RunnableRunnable您已经加倍运行的基础上再进行一次,从而使线程每次都变得越来越快,您需要以某种方式暂停线程之类的thread.sleep()东西锁定屏幕时类似,因此当您恢复时,您不会重新创建一个新的Runnable,而是从您在线程中中断的位置开始。

如果你正在制作一个新RunnableonCreate方法。每当手机旋转或手机恢复等时都会调用它,这就是您可能遇到此问题的原因。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

不知道它在游戏中如何运作,但没有玩弄它。

祝你好运,希望这会有帮助。

于 2011-07-25T20:36:46.147 回答