我想知道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
的情况下才能这样做?
顺便说一下,我发现Context
有OnStopEvent
方法,因此在getActivity()
中获取Activity
没有问题,但是{{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,是否可以这样做?
我没有得到它。