在启动时重复执行的后台任务
在启动时重复执行的后台任务
你好,我想创建一个后台服务来更新我的应用程序的数据,并每天重复一次,同时我希望这个服务能在启动时自动启动。我有以下代码:
public class OnBoot extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 创建意图 context.startService(new Intent(context, BackgroundServiceHandler.class)); } }
我有一个设置菜单,用户可以选择重复警报的小时。
如何重置闹钟管理器的时间?我应该把闹钟管理器的代码放在哪里?我需要使用服务还是意图服务?如何检查服务是否正在运行?
闹钟管理器的代码:
Intent intent = new Intent(MainActivity.this, AlarmService.class); intent.putExtra("i", 3); PendingIntent pi = PendingIntent.getService(MainActivity.this, 9, intent, 0); // 每天上午9点 Calendar calendar = Calendar.getInstance(); // 如果当前时间在上午9点之后或等于9点,就安排到第二天 if (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 9) { calendar.add(Calendar.DAY_OF_YEAR, 1); // 添加,而不是设置! } calendar.set(Calendar.HOUR_OF_DAY, 9); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);
背景重复任务在启动时出现的问题是由于以下原因:
1.如何重置AlarmManager的时间?
2.在哪里放置AlarmManager的代码?
3.是否需要使用Service或IntentService?
4.如何检查服务是否正在运行?
为了解决这些问题,可以采取以下方法:
1.要重置AlarmManager的时间,可以参考以下链接:How to edit/reset Alarm Manager?
2.可以将AlarmManager的代码放在静态方法中,并从用户设置时间的地方以及从OnBootReceiver中调用它。有关如何实现接收OnBoot事件的类,请参考以下链接:answer。
3.关于使用Service还是IntentService,可以参考以下链接:Service vs IntentService
4.要检查服务是否正在运行,可以参考以下链接:Check if service is running on Android?