[英]ANR in SurfaceView method “onTouchEvent(…)” on Android
[英]Android surfaceview onTouchEvent limiting?
当您有用于动画/游戏/ ...的surfaceView类时,您在同一类中具有onTouchEvent()方法和绘图/屏幕刷新方法。 现在,我只想休眠onTouchEvent方法,这样就不会每秒调用+ -80次并淹没CPU(并因此导致延迟)。 问题是,如果我在这节课上睡觉,它也会停止绘画。
** Edit88我正试图阻止onTouchEvent()调用过于频繁。 我的尝试:
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d("firstTest",Integer.toString(event.getAction())); //shows up
if (!sleeper.CurrentlySleeping) {
Log.d("2ndTest",Integer.toString(event.getAction())); //not showing up
~~ some calculations and stuff ~~
。
public class TouchSleeper extends Thread {
// If Thread is sleeping or not.
public static Boolean CurrentlySleeping;
public TouchSleeper() {
CurrentlySleeping = false;
this.setPriority(MIN_PRIORITY);
}
@Override
public void run() {
try {
while (true) {
CurrentlySleeping = true;
TouchSleeper.sleep(50);
CurrentlySleeping = false; }
~end~
首先是我的SurfaceView类的一段代码。 类/线程的第二部分,一直在更改布尔值。 请注意,我的第一个Log.d如何返回某些内容,而第二个却没有。 这告诉我,CurrentlySleeping永远不会虚假? 我仍然没有弄清楚事情...?
我认为,一开始不监听onTouch事件会更简单,而不是在确实发生onTouch事件时阻止处理代码,在这种情况下,您仍然会有调用该函数的开销(在这种情况下,当你不想的时候
因此,实现onTouchListener
接口,并使用setOnTouchListener
将其设置为视图。 现在,当您不想监听任何onTouch事件时,将其设置为NULL。
现在,不要使用睡眠,而是尝试使用“警报”或将延迟的消息发布到线程处理程序中,以在稍后的时间重置视图的onTouchListener
。 (个人而言,我认为它比睡觉要整洁得多:))
如果该类具有onTouchEvent方法,则无法阻止其被调用。 只是让onTouchEvent返回false而不做其他任何事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.