我希望在启动时运行一项服务,然后计划每10分钟运行一次。我该怎么办?
如果在启动时,我可以强制执行10分钟的计划,但是我认为每次启动时都需要计划该时间,因为重启后所有计划都丢失了?
有一个很好的小教程here,它解释了如何在引导时启动服务,该服务一直保持运行,并且每隔一定的时间就会执行某项操作(对于本教程而言,写入日志文件)。
正如@CommonsWare指出的那样,这会在系统上造成不必要的负载。更好的方法是使用AlarmManager安排重复警报,如this thread中所述。您可以注册您的应用以接收BOOT_COMPLETED广播(如以上教程中所述),并作为响应安排警报。
在我的应用程序中,我已经在ACTION_BOOT_COMPLETED意向中注册了一个广播接收器,以便在设备启动完成后得到通知。要获得结果,您必须在清单文件中指定以下内容:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
...
<receiver
android:name=".YOUR_BROADCAST_RECEIVER">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
[在BroadcastReceiver中,我通过]启动了服务>
public void onReceive(Context context, Intent intent) { context.startService(new Intent(context, serviceClass)); ... }
最后在服务的onStartCommand中
public int onStartCommand(Intent intent, int flags, int startId) { ... setNextSchedule(); ... } private void setNextSchedule() { long time = WHEN_YOU WANT_THE SERVICE TO BE SCHEDULED AGAIN; AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); PendingIntent pi = PendingIntent.getService(this, 0,new Intent(this, this.getClass()), PendingIntent.FLAG_ONE_SHOT); am.set(AlarmManager.RTC_WAKEUP, time, pi); }
AlarmManger将使用挂起的意图将您传递的意图发送给您的服务。看看here
再见