如何让Android服务即使在设备未唤醒时也能运行?

如何让Android服务即使在设备未唤醒时也能运行?,android,android-service,android-location,Android,Android Service,Android Location,我的应用程序目标是每20分钟保存一次位置更新 我使用了服务,它工作得很好,但当我锁定屏幕或它被自动锁定时,服务停止运行。 当我解锁它时,服务会再次运行 在我的代码上突出显示: 服务() 如何使我的代码在所有条件下始终运行?安排您的服务按计划工作(例如,“call timer()”),包括唤醒设备的正确方法是使用AlarmManager,可能与my或类似工具一起使用。是,使用AlarmManager每10分钟启动一次服务,例如使用如下设置重复。去掉服务中的计时器,让服务在oncreate或onCo

我的应用程序目标是每20分钟保存一次位置更新

我使用了服务,它工作得很好,但当我锁定屏幕或它被自动锁定时,服务停止运行。 当我解锁它时,服务会再次运行

在我的代码上突出显示:

服务()


如何使我的代码在所有条件下始终运行?

安排您的服务按计划工作(例如,“call timer()”),包括唤醒设备的正确方法是使用
AlarmManager
,可能与my或类似工具一起使用。

是,使用AlarmManager每10分钟启动一次服务,例如使用如下设置重复。去掉服务中的计时器,让服务在oncreate或onCommand中运行任务,然后开始完成

    int SECS = 1000;
    int MINS = 60 * SECS;
    Calendar cal = Calendar.getInstance();
    Intent in = new Intent(context, YourService.class);
    PendingIntent pi = PendingIntent.getService(context, 0, in, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarms = (AlarmManager)context.getSystemService(
            Context.ALARM_SERVICE);
    alarms.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
            10 * MINS, pi);
您可以从启动服务的按钮创建一个活动,在onclick处理程序中包含此代码。若你们想在启动时运行,你们需要把它放在一个广播接收器中,当设备启动时它会收到通知,但这是另一个主题

当设备处于休眠状态时,服务和计时器不工作的原因是cpu关闭,并且您的代码没有唤醒锁。AlarmManager会稍微唤醒cpu以运行您的服务

    int SECS = 1000;
    int MINS = 60 * SECS;
    Calendar cal = Calendar.getInstance();
    Intent in = new Intent(context, YourService.class);
    PendingIntent pi = PendingIntent.getService(context, 0, in, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarms = (AlarmManager)context.getSystemService(
            Context.ALARM_SERVICE);
    alarms.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
            10 * MINS, pi);