【问题标题】:Locking screen in Android speeds up gameAndroid中的锁屏加速游戏
【发布时间】:2011-07-25 19:18:25
【问题描述】:

我正在使用发布延迟 Runnable 的 Handler 更新我的游戏。

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

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

【问题讨论】:

    标签: android handler runnable performance resume


    【解决方案1】:

    似乎正在发生的事情是每次您锁定屏幕然后恢复它时,它会在 Runnable 之上创建另一个 Runnable,您已经将运行加倍,从而使线程每次运行得越来越快,您需要在锁定屏幕时以某种方式暂停您的线程,例如 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

    不知道它在游戏中会如何工作,但没有玩过。

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

    【讨论】:

    • 非常感谢!会让线程在 onPause 中休眠并在 onResume 中恢复它可以解决这个问题吗?
    • 没问题!这对我来说听起来很合乎逻辑。试试看,希望能解决。很高兴我能提供一些帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多