为什么我的 broadcastreciever 将空值返回到 oncreate 中设置的变量?

why is my broadcastreciever returning nulls to variables set in the oncreate?

我有一个从我的 MainActivity 中的处理程序调用的 BroadcastReceiver。 当我尝试从我的 BroadcastReceiver 访问 MainActivity 中设置的变量时,它 returns null。我已经将 MainActivity 设置为 super,而我想要的变量是静态的。

我需要从 MainActivity 获取上下文,但我无法获取它。 我试图在 BroadcastReceiver 中放置一个处理程序以返回 ActivityMain,希望它能够以这种方式访问​​上下文。

ActivityMain.java: http://pastebin.com/q2NtnZuU

广播接收器:http://pastebin.com/Vw6eUbKg

I have a BroadcastReceiver which is called from a handler from my MainActivity

不,不是。 BroadcastReceiver 由使用 AlarmManager 设置的警报调用。调度工作是在 Runnable 中完成的,由 Handler 发布,但不清楚为什么需要 HandlerRunnable

When I try to access a variable set in the MainActivity from my BroadcastReceiver it returns null

您的进程很可能在您安排警报和警报事件发生之间终止。这是完全正常的。此外,使用 AlarmManager 后的 允许您的进程终止,同时仍然在所需时间获得控制权。

I need to get the context from the MainActivity

不,您没有,因为您的流程中可能没有 MainActivity 的实例。如果 Android 终止了该进程,然后创建了一个新的进程实例来调用您的 BroadcastReceiver,将不会有 MainActivity.

的实例

您需要以其他方式解决任何业务问题。

例如,假设这是一个日历应用程序,您希望根据用户为某项活动设置的提醒让用户了解即将发生的活动。欢迎您使用AlarmManager在提醒时间获得控制权。但是,在那个时间点,有两种可能的情况:

  1. 与活动相关的你的 activity 在前景中

  2. #1 以外的任何情况,其中包括在事件提醒发生时您没有进程 运行 并且用户正在做某事的情况其他使用他们的设备,例如在路上行驶并使用导航应用程序来帮助他们

在这里正确的做法是让您的 activity 了解该事件,当且仅当 activity 出现在前景中。如果activity没有处理事件,你可以提出一个Notification让用户知道日历提醒。

最简单的方法是通过事件总线,其中 activity 响应事件,或者如果 activity 未能响应,则事件发布者自行处理事件。 This directory 包含为三个主要事件总线实现(LocalBroadcastManager、greenrobot 的 EventBus 和 Square 的 Otto)实现此模式的三个示例应用程序。