Мое приложение включает в себя Сервис, который порождает HandlerThread, который периодически запрашивает обновление местоположения из LocationManager. Каждый раз, когда я получаю обновленное местоположение, я отключаю обновления местоположения и отправляю отложенное сообщение Hander, которое запустит обновления снова в будущем:
public class VMLocator extends HandlerThread implements LocationListener {
...
private final class VMHandler extends Handler
{
public VMHandler(Looper looper)
{
super(looper);
}
@Override
public void handleMessage(Message msg)
{
if(MSG_START_LOCATION_UPDATES == msg.what)
{
startLocationUpdates();
}
}
}
...
@Override
public void onLocationChanged(Location location) {
...
stopLocationUpdates();
// Schedule updates to start again in the future.
Message msg = new Message();
msg.what = MSG_START_LOCATION_UPDATES;
handler.sendMessageDelayed(msg, 5000); // <-- Testing value. Will be much larger.
...
}
В настоящее время я тестирую телефон HTC Desire S под управлением 2.3.3, разрабатываемый с Eclipse. Все работает нормально, когда телефон подключен через USB-кабель к моей машине для разработки. Тем не менее:
- Если я запускаю приложение из Eclipse (либо отлаживаю, либо запускаю), все работает нормально, пока я не отсоединяю USB-кабель, после чего мой HandlerThread, похоже, останавливается.
- Если я запускаю приложение с самого телефона, после отсоединения USB-кабеля служба запускается, но поток, похоже, не работает.
Что следует отметить:
- В любом из вышеприведенных случаев, если я снова подключу USB-кабель, он сразу же снова начнет работать.
- В любом случае выше, Настройки -> Приложения -> Запущенные службы всегда указывают, что моя Служба все еще работает .
- Я разбросал несколько отладочных тостов; насколько я могу судить, моя служба не уничтожается, но очередь сообщений HandlerThread перестает обрабатывать сообщения.
Я попытался запустить с телефона, когда он отключен, и с отключенной отладкой по USB с тем же результатом. Я чувствую, что в документах, которые я пропустил, есть что-то простое, потому что я думал, что запуск / отладка из Eclipse установили приложение, и приложение должно нормально работать независимо от того, подключен ли USB-кабель или нет.