执行sleep()onTouchEvent或在surfaceview中控制帧率(android)

时间:2017-02-24 10:29:01

标签: android multithreading surfaceview

请检查link。以下代码来自此链接。我不知道为什么它说我们必须使用线程睡眠来限制触摸事件的数量。 我有一个surfaceview和gamethread来处理触摸事件推送的事件。是否需要睡眠,或者我应该通过控制帧率来处理游戏中的睡眠。

 try {
    Thread.sleep(16);
    } catch (InterruptedException e) {
    }
    return true;
    } 

整个代码

@Override
public boolean onTouchEvent(MotionEvent event) {
// we only care about down actions in this game.
try {
// history first
int hist = event.getHistorySize();
if (hist > 0) {
// add from oldest to newest
for (int i = 0; i < hist; i++) {
InputObject input = inputObjectPool.take();
input.useEventHistory(event, i);
gameThread.feedInput(input);
}
}
// current last
InputObject input = inputObjectPool.take();
input.useEvent(event);
gameThread.feedInput(input);
} catch (InterruptedException e) {
}
// don't allow more than 60 motion events per second
try {
Thread.sleep(16);
} catch (InterruptedException e) {
}
return true;
}

1 个答案:

答案 0 :(得分:0)

您的链接指向2009年发布的文章,您应该尝试找到更新的文章。

代码本身看起来不对,作者解释说他的代码旨在避免阻塞UI线程,但随后在onTouchEvent()中调用Thread.sleep(16),这是从UI线程调用并阻止它。 / p>

这个例子怎么样?我还没有详细阅读,但代码看起来要好得多:https://www.codeproject.com/Articles/827608/Android-Basic-Game-Loop