Спать в блоках onTouchEvent onSensorChanged - PullRequest
1 голос
/ 13 ноября 2010

Я делаю приложение, которое будет использовать как touchevents, так и sensorevents. Проблема с touchevents состоит в том, что они очень часто отключаются и, следовательно, потребляют огромное количество процессорного времени. Обычное решение - сделать Thread.sleep, чтобы он остыл.

Однако, если кто-то хочет использовать onTouchEvent и onSensorChanged в одном и том же упражнении, применение хака Thread.sleep также замедлит работу наSensorChanged. Это, очевидно, вызвано тем, что два метода вызываются из одного (пользовательского) потока.

Есть ли способ вызвать onTouchEvent из другого потока, отличного от пользовательского интерфейса, так что можно было бы выполнить трюк Thread.sleep, не замедляя также и SensorChanged?

1 Ответ

0 голосов
/ 13 ноября 2010

«Обычное решение - сделать 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();
...