为什么broadcastIntent不是静态方法?

时间:2019-05-06 10:34:56

标签: android android-intent android-context

我刚接触Android。我试图基本上使用Intents构建事件系统,将一个Intent从一个普通的Java对象触发到另一个用作事件处理程序的普通Java对象。

从这个角度来看,我需要一个上下文来传达意图对我来说很奇怪。对我来说,“意图”应该只是我发出的一条消息,而我已经在我的应用程序中的任何位置注册的任何广播接收者都神奇地收到了该消息。

为什么broadcastIntent是上下文方法,而不是“自由过程”(静态方法)?您能描述context1.broadcastIntent(intent)context2.broadcastIntent(intent)会产生不同影响的情况吗?

1 个答案:

答案 0 :(得分:1)

  

我很需要上下文来广播意图,这对我来说很奇怪。

sendBroadcast()上的

Context用于设备级广播。这样的呼叫会广播到设备上的每个应用。

这似乎不是您所需要的。

  

对我来说,“意图”应该只是我发出的一条消息,而我已经在我的应用程序中的任何位置注册的任何广播接收者都神奇地收到了该消息。

您所描述的是进程内事件总线。 LocalBroadcastManager implements one,尽管它也需要一个Context(可能与尝试使用主应用程序线程有关;我忘记了原因)。还有其他事件总线实现,例如greenrobot的EventBus,不需要Context

  

您能描述一下context1.broadcastIntent(intent)和context2.broadcastIntent(intent)会产生不同影响的情况吗?

好吧,因为Context是一个接口,所以不需要两个Context对象共享一个通用方法实现。不过,broadcastIntent()上没有Context方法。

尽管如此,Context通常是上帝的对象。 Context之所以经过许多事情的部分原因是,“上下文”上帝对象是2000年中期Android刚被开发时的流行设计模式。