我正在使用Handler发布延迟的Runnable来更新我的游戏。
public class Example implements Runnable
{
Handler handler;
public Example()
{
handler = new Handler();
handler.postDelayed(this,10);
}
public void run()
{
handler.postDelayed(this,10);
}
}
每当我按下锁定屏幕按钮然后恢复游戏时,它的运行速度比预期的要快得多。每次我锁定屏幕并恢复,它运行得越来越快。但是,如果我重新启动活动或完成然后重新打开活动,它将再次以正常速度运行。请帮忙。 提前谢谢。
答案 0 :(得分:3)
每次锁定屏幕然后恢复时,似乎正在发生的事情就是在Runnable
之上另外Runnable
你已经加倍了你的运行,从而使线程越来越快每当你锁定你的屏幕时,你需要以某种方式暂停你的线程,如thread.sleep()
或类似的东西,所以当你恢复时,你不会重新创建一个新的Runnable
,而只是从你离开的地方开始你的主题。
如果您使用Runnable
方法制作新的onCreate
。它会在手机旋转时,或者当手机恢复等时被调用,这就是为什么你可能遇到这个问题。在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
Dunno如何在游戏中发挥作用,但没有玩弄它。
祝你好运,希望这会有所帮助。