gpt4 book ai didi

android - roboguice 注入(inject)了哪个上下文?

转载 作者:行者123 更新时间:2023-11-30 02:38:58 26 4
gpt4 key购买 nike

我想知道 Roboguice 注入(inject)了哪个上下文,是应用程序上下文还是当前 Activity ?

我正在尝试同时使用 Roboguice 和 Robospice。我正在注入(inject) Robospice 的 SpiceManager在 fragment 中,但 fragment 不知道 SpiceManager ,它通过一个界面看到它,比方说 MyInterface .

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();
}
}
}

我的问题是:

RoboGuice 是否可以观察 Activity 事件旁边的 fragment 事件,文档不清楚?

我是否认为 SpiceManager 需要一个在 fragment/Activity 被销毁时被销毁的上下文?我看过 SpiceManager.start(Context context) 的代码并创建一个 WeakReference到过去的Context .

如何让 RoboGuice 注入(inject)特定的 Context/Activity

没有 MyFragment 是否可以这样做?知道 MyInterface它使用的对象需要 Context

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

最佳答案

这么多问题;)

A) RoboGuice 能否观察 Activity 事件旁边的 fragment 事件,文档不清楚?

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

但是你在事件端所做的是完全合法的。只是为了清楚。您正在从 fragment 中收听 Activity 生命周期。为什么不呢?

您唯一需要做的就是注册到该 Activity 的事件管理器实例。将 @Inject EventManager eventManager 添加到您的 fragment 中。这足以让 RG 自动注册您的监听器。

B) RS 将只需要回调的上下文,而不是执行请求。该请求将在服务中执行。您传递给 RS 的上下文只是用来表示“如果此上下文终止,则所有监听器都将终止,不要通知他们。但是,继续执行请求并缓存结果。”

此处的操作方式有点复杂。最简单的实际上是在 Activity 级别管理香料管理器。将 fragment 中的事件发送到您的 Activity ,以要求它在需要时启动请求。那是最简单的。

但也可以在 fragment 级别管理 spicemanager。在这种情况下,使用其 onStart/onStop 方法在 fragment 本身中管理您的 spicemanager 生命周期。

C) 是否可以在 MyFragment 不知道它使用的 MyInterface 对象需要上下文的情况下这样做?

我没听懂。

关于android - roboguice 注入(inject)了哪个上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26054959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com