Android: AlarmManager on BroadcastReceiver 的生命周期

标签 android broadcastreceiver alarmmanager lifecycle

我想在特定时间唤醒一个 Activity 。为此,我(还)在引导完成的 BroadcastReceiver 上注册了 AlarmManager。

据我所知,只有 Service 才能永远存活在后台以唤醒 Activity。 Activity 和 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);
    }
}

最佳答案

Is this safe?

AlarmManager 不关心您使用哪种类型的 PendingIntent

用户可能会或可能不会喜欢突然出现的 Activity ,但这是一个单独的问题。

As far as I know, only the Service can last forever to be alive in the background to wake an Activity.

服务不会永远持续下去。

Activities and BroadcastReceiver can die on inactivity.

没有。您的进程可能会“死于不活动”,其中包括该进程中的所有组件。

why is AlarmManger created by BroadcastReceiver doesn't get destroyed by Android lifecycle manager?

因为 AlarmManager 是一个系统服务,由操作系统维护,而不是由您的应用维护。

关于Android: AlarmManager on BroadcastReceiver 的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15231611/

相关文章:

java - boolean 值和 if 条件的 Android Studio SharedPreferences

Android以编程方式测试wifi连接

java - 无法添加窗口 - token null 不适用于广播接收器 OnReceive 内的应用程序

android - AlarmManager 从不运行

java - 使用 AlarmManager 测试 BroadcastReceiver

从未决 Intent 接收广播的Android问题

Android - 为什么 IMarketBillingService 文件是 iadl 文件而不是 .java

android - ArrayAdapter 的默认布局

android - 如何触发fragment的onCreate方法?

Android 外部应用程序安装(在 SD 卡上),通过接收器重新加载 alarmmanager 警报