我想在特定时间唤醒一个 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/