[英]Android: lifecycle of AlarmManager on BroadcastReceiver
我想在特定时间唤醒一项活动。 为此,我(也)在Boot complete BroadcastReceiver上注册了AlarmManager。
据我所知,只有服务可以永远持续在后台活着才能唤醒活动。 活动和BroadcastReceiver可以在不活动时死亡。
我有以下代码不运行服务。 但是,它似乎正在工作(即使我在24小时后启动它也会起作用)。 这样安全吗? 或者我应该推出一项服务? 如果这是安全的,这背后的逻辑是什么? 为什么由BroadcastReceiver创建的AlarmManger不会被Android生命周期管理器破坏?
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
registerAlarm(context);
}
}
private void registerAlarm(Context context)
{
Intent intent = new Intent(context, Alarm.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am =(AlarmManager)context.getSystemService(Activity.ALARM_SERVICE);
long nextAlarm = System.currentTimeMillis() + 10000; //Some time later.
am.set(AlarmManager.RTC_WAKEUP, nextAlarm, pendingIntent);
}
}
这样安全吗?
AlarmManager
不关心你使用什么样的PendingIntent
。
用户可能会或可能不会欣赏突然出现的活动,但这是一个单独的问题。
据我所知,只有服务可以永远持续在后台活着才能唤醒活动。
服务不会永远持续下去。
活动和BroadcastReceiver可以在不活动时死亡。
不会。您的流程可能会“死于不活动”,其中包括该流程中的所有组件。
为什么由BroadcastReceiver创建的AlarmManger不会被Android生命周期管理器破坏?
因为AlarmManager
是一个系统服务,由操作系统维护,而不是由您的应用程序维护。
Android可以随时杀死服务。 有关可用于在android上触发重复任务或长时间运行任务的选项的详细分析,请查看此线程 - 在Android中安排定期任务
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.