在启动时重复执行的后台任务

6 浏览
0 Comments

在启动时重复执行的后台任务

你好,我想创建一个后台服务来更新我的应用程序的数据,并每天重复一次,同时我希望这个服务能在启动时自动启动。我有以下代码:

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);

0
0 Comments

背景重复任务在启动时出现的问题是由于以下原因:

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?

0