Как сделать так, чтобы Thread не останавливался в режиме ожидания?

В моем приложении у меня есть служба, созданная в другом потоке, чем основной (пользовательский интерфейс). Затем в сервисе я создал еще 3 потока, которые бесконечно выполняются в фоновом режиме. Но как только телефон переходит в режим ожидания, эти потоки приостанавливают свое выполнение!

Если я подключаю телефон к компьютеру через usb-кабель, вместо этого я вижу, что потоки работают правильно, не приостанавливая себя даже в режиме ожидания.

Но как не допустить такого поведения потоков при нормальном выполнении?

спасибо

РЕШЕНО:

Мне удалось получить это, просто используя объект PowerManager, который получает PARTIAL_WAKE_LOCK, который оставляет процессор активным от приобретения () до выпуска ().

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
 PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
 wl.acquire();
   ..CPU will stay on during this section..
 wl.release();

person Davide Lorenzi    schedule 23.05.2012    source источник
comment
Разве режим ожидания не включает в себя перевод процессора в спящий режим? Если это так, трудно понять, как вы могли бы выполнять какие-либо потоки в режиме ожидания, поскольку разрешение выполнения потока означало бы повторное пробуждение ЦП, после чего вы больше не находились бы в режиме ожидания.   -  person Jeremy Friesner    schedule 23.05.2012
comment
Привет, tnx ваши слова помогают мне понять, как решить проблему! :D (отредактировал вопрос с решением)   -  person Davide Lorenzi    schedule 23.05.2012


Ответы (1)


Мне удалось получить это, просто используя объект PowerManager, который получает PARTIAL_WAKE_LOCK, который оставляет процессор активным с момента вызова accept() до вызова release().

Таким образом, даже если телефон переходит в режим ожидания, поток обязательно будет запущен.

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
 PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
 wl.acquire();
   ..CPU will stay on during this section..
 wl.release();
person Davide Lorenzi    schedule 24.05.2012