0

我一定没有正确实现唤醒锁。我就是这样做的。这个对吗?

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

4

1 回答 1

1

如果一个服务在很长一段时间内处于非活动状态,Android 会杀死它。通常,开发人员会将服务设置为前台优先级,但这会导致电池寿命不佳。如果您需要保持长时间运行的服务,您现在必须在服务类中使用新的 startForeground api 在通知栏中发布图标。

开发者.android

我创建了一个类,如果你需要它,它可以向后兼容 Android 1.5 和 1.6.... ServiceForegrounder.java

于 2011-05-05T23:04:07.483 回答