繁体   English   中英

Android:BroadcastReceiver上的AlarmManager生命周期

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM