Сервис Android останавливается даже при наличии Wakelocks - PullRequest
0 голосов
/ 06 мая 2011

Я, должно быть, неправильно реализовал wakelocks.Вот как я это сделал.Это правильно?

private static final String LOCK_NAME_STATIC="domination.shredAssistant.locationService";
private static volatile PowerManager.WakeLock lockStatic=null;

synchronized private static PowerManager.WakeLock getLock(Context context) {
    if (lockStatic==null) {
        PowerManager mgr=(PowerManager)context.getSystemService(Context.POWER_SERVICE);

        lockStatic=mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                                                    LOCK_NAME_STATIC);
        lockStatic.setReferenceCounted(true);
    }

    return(lockStatic);
}

и метод onStart

//onStart
public void onStart( Intent intent, int startId ) {
      super.onStart( intent, startId );
      if (running == false) {
          Context ctxt=getApplicationContext();
          getLock(ctxt).acquire();
          running = true;
          readResorts();
          serviceHandler = new Handler();
          serviceHandler.postDelayed( new RunTask(),1000L );
          runtest=true;
          locupdate(0,0);
      }

}

Я не могу понять, почему служба по-прежнему убивается после периода бездействия, даже если я использую getLock(ctxt) .acquire ();Спасибо за вашу помощь!-Dom

1 Ответ

1 голос
/ 06 мая 2011

Если служба в течение какого-то времени неактивна, Android ее убьет. Обычно разработчики устанавливают приоритетное значение для служб, но это приводит к плохому сроку службы батареи. Если вам нужно сохранить долго работающий сервис, теперь вам нужно использовать новый API startForeground в классе сервиса, чтобы разместить значок в панели уведомлений.

developer.android

Я создал класс, который делает его обратно совместимым с Android 1.5 и 1.6, если вам это нужно .... ServiceForegrounder.java

...