使用AlarmManager启动活动,无需BroadcastReceiver

3
我希望有人能给我一个答案:
我想知道是否可能(并且常见)使用AlarmManager直接启动Activity。文档没有明确解释这一点。它只描述了Broadcastreceivers的用法。
如果可以直接启动我的Activity,我在哪里接收Intent(onNewIntent)?
非常感谢 Jean-Pierre
1个回答

3
我想知道是否可以(以及是否常见)使用AlarmManager直接启动Activity。
是的。
文档并未明确解释此问题。它仅描述了Broadcastreceivers的用法。
对于“唤醒”警报,如果您希望设备在警报触发时可靠地唤醒,则使用BroadcastReceiver是最常见的情况。
从AlarmManager启动Activity应该仅用于“闹钟”类型的应用程序,除此以外很少使用。当您的活动处于前台时,您无法知道用户可能正在执行的操作,如果他们觉得您的干扰是不合理的,他们可能会非常生气。
如果可以直接启动我的Activity,我将在哪里收到Intent(onNewIntent)?
默认情况下,将创建Activity的新实例。如果您使用FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP,它会提供现有Activity的一个实例,并且您将在onNewIntent()中获得Intent。

这个示例项目演示了如何使用AlarmManager这个示例项目演示了当闹钟响起时,用户可以配置ActivityNotification。这两个示例都是在一系列教程中比较深入的,因此应用程序有些复杂。


即使我回信晚了,还是非常感谢你的答复。它对我帮助很大 :) - Jean-Pierre
这意味着当AlarmManager唤醒BroadcastReceiver并且我想在其onReceive()中执行我的工作时,我不需要持有唤醒锁,对吗? - jakk
1
@jakk:是的,但请记住onReceive()在您的进程的主应用程序线程上调用,因此您的工作必须非常快。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接