1

我正在制作一个将同时利用 touchevents 和 sensorevents 的应用程序。touchevents 的问题是它们经常触发,因此会消耗大量的 CPU 时间。常见的解决方案是做一个 Thread.sleep 让它冷却下来。

但是,如果想在同一个活动中同时使用 onTouchEvent 和 onSensorChanged,应用 Thread.sleep hack 也会减慢 onSensorChanged。这显然是由同一个 (ui) 线程调用的两个方法引起的。

是否有某种方法可以从与 ui 不同的线程调用 onTouchEvent,因此可以在不减慢 onSensorChanged 的​​情况下执行 Thread.sleep 技巧?

4

1 回答 1

0

“常见的解决方案是做一个 Thread.sleep 让它冷却下来。”

你是从哪里听来的?在主线程(也称为 EDT - 事件调度线程)上休眠是不可接受的。Android 正在重绘屏幕并在此线程上执行各种任务。睡觉会使它反应迟钝,恕我直言,这是一种不好的做法。

如果 onTouchEvent() 触发太频繁,那么只需在代码中过滤它们 = 如果自上次事件以来至少 X 时间还没有过去,则什么也不做。

long lastTime = 0; // field in you class holding event handler

// inside your onTouchEvent handler
if(System.getCurrentTimeMillis() - lastTime < XXX)
    return;
 lastTime = System.getCurrentTimeMillis();
于 2010-11-13T10:05:43.887 回答