roboguice注入了哪些上下文?

时间:2014-09-26 08:12:00

标签: android roboguice robospice

我想知道Roboguice注入的上下文,是应用程序上下文还是当前活动?

我试图同时使用Roboguice和Robospice。我在一个片段中注入了Robospice的SpiceManager,但片段并不知道SpiceManager,它通过界面看到它,让我们说{ {1}}。

MyInterface

我的问题是:

RoboGuice可以观察活动事件旁边的片段事件,文档是否清晰?

我是否认为SpiceManager需要一个在片段/活动被销毁时将被销毁的上下文?我已经查看了public class MyFragment extends RoboFragment { //this is where the SpiceManager gets injected @Inject MyInterface manager; ... } //this is the implementation that I'm going to inject //it is simultaneously an event listener for the fragment's life cycle events so that the //SpiceManager can be appropriately started and stopped. public class MyManager implements MyInterface { private SpiceManager spiceManager = new SpiceManager(MySpiceService.class); //Which context will get injected here? How can I make Roboguice inject a specific context that I want, for example, a specific activity that I want. private @Inject Context context; //Here, I need to start the SpiceManager public void myFragmentOnStart(@Observes OnStartEvent onStart) { //SpiceManager requires a context, more specifically an activity which will be destroyed and then garbage collected, so It shouldn't be an application context because the resources SpiceManager uses will never be released. spiceManager.start(context); } public void myFragmentOnStop(@Observes OnStopEvent onStop){ if (spiceManager.isStarted()) { spiceManager.shouldStop(); } } } 的代码,并为传递的SpiceManager.start(Context context)创建了WeakReference

如何让RoboGuice注入特定的Context

是否可以在Context/Activity知道其使用的MyFragment对象需要MyInterface的情况下才能这样做?

顺便说一下,我发现ContextOnStopEvent方法,因此在getActivity()中获取Activity没有问题,但是{{1只是一个空类。

1 个答案:

答案 0 :(得分:1)

这么多问题;)

A)RoboGuice可以观察活动事件旁边的片段事件,文档是否清晰?

事件可以是RG中的任何内容。默认情况下,RG提供一些很好的事件来通知活动的生命周期。 RG 3.1版实际上是为Fragments添加了一些新事件。这应该会在几周后发布。

但你在活动方面做的事情是完全合法的。只是为了清楚。您正在片段中侦听活动生命周期。为什么不呢?

您唯一需要注册的活动事件管理器实例。将@Inject EventManager eventManager添加到您的片段中。这足以让RG自动注册你的听众。

B)RS只需要一个上下文用于回调,而不是执行请求。该请求将在服务中执行。您传递给RS的上下文仅用于说"如果此上下文死亡,则所有听众都将死亡,不会通知他们。但是,继续,执行请求并缓存结果。"

这里的方式有点复杂。最简单的是在活动级别管理spice经理。将片段中的事件发送到您的活动,要求它在需要时启动请求。那是最简单的。

但也有可能让spicemanager在片段级别进行管理。在这种情况下,使用onStart/onStop方法管理片段本身的spicemanager生命周期。

C)如果没有MyFragment知道它使用的MyInterface对象需要一个Context,是否可以这样做?

我没有得到它。