我的ImageView上有一个OnTouchlistener,我感觉它不时会阻塞MainThread。我也运行了一些动画,日食有时会告诉我很多帧被跳过了。
我不需要跟踪每个 MotionEvent - 每 20-30 毫秒调用一次 onTouch 方法就足够了。
有没有办法设置这个?
我还想提一下,这个onTouchListener是在只处理此类触摸事件的特殊类中实现的;这意味着我可以使这个类扩展Thread。但是,如果我在 onTouch 方法的末尾放一个Thread.sleep(ms)
,这会解决问题吗?
您想要完成的:
将字段long lastTime = -1
添加到侦听器类,然后在onTouch(MotionEvent event)
中添加:
if(lastTime < 0)
{
lastTime = System.currentTimeMillis();
}
else
{
if(System.currentTimeMillis() - lastTime < 30) //how much time you decide
{
return true; //ignore this event, but still treat it as handled
}
else
{
lastTime = System.currentTimeMillis();
}
}
//your logic
通常,仅将onTouchListener添加到ImageView永远不会导致UI延迟,除非您对每个事件进行大量计算。如果是这种情况,我建议你也去其他地方寻找潜在的问题。
另外,beworker的建议非常好,不要打电话给Thread.Sleep()
因为它会停止线程中的其他一切。