我希望在启动时运行服务,然后安排每10分钟运行一次。
我有什么想法吗?
如果在启动时可以强制执行10分钟的计划,但我认为我需要在启动时每次都安排这个计划,因为重启后所有计划都会丢失?
任何帮助真的很感激
感谢
答案 0 :(得分:1)
有一个很好的小教程here,它解释了如何在启动时启动一个只是保持运行的服务,并且在一定的时间间隔内做某事(在教程的情况下写入日志文件)。 / p>
正如@CommonsWare所指出的那样,这会在系统上造成不必要的负担。更好的方法是使用AlarmManager安排重复警报,如this thread中所述。您可以注册您的应用程序以接收BOOT_COMPLETED广播(如上面的教程中所述)并作为响应安排警报。
答案 1 :(得分:0)
在我的应用程序中,我在ACTION_BOOT_COMPLETED Intent上注册了一个广播接收器,以便在设备启动完成时收到通知。 要获得结果,您必须在清单文件中指定以下内容:
<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
再见