【问题标题】:Is AppObservable a MUST for android?AppObservable 是 android 必须的吗?
【发布时间】:2015-04-28 06:48:07
【问题描述】:

在 android 应用中,AppObservable 是每个 observable 的必须项吗?

我有一个 retrofit 生成的 Observable ,由 Dagger 注入:

public class UserInfoFragment extends Fragment {
 @Inject
 Observable<User> user;
}

在这个例子中

我应该像这样覆盖onViewCreated() 中的“用户”吗?

this.user = AppObservable.bindFragment(this , user);

此外,如果我不直接注入 Observable,我会注入 an Object containing an Observable

@Inject
CachedValue<User> cachedUser;

并且在 CachedValue 中,有一个 Observable(跳过其他字段):

public class CachedValue<T> {
  public Observable<T> getObservable() {
    return networkObservable.startWith(localObservable).take(1);
  }
}

我应该用 AppObservable 提升 Observable 替换这个 Observable 吗?

AppObservable.bindFragment(this , cachedUser.getObservable());

所有这些代码在模拟器中没有 AppObservable 的情况下完美运行(我确实在 onDestroyView() 取消订阅这些订阅),但我不知道在实际情况下是否足够?长时间运行后会有内存泄漏吗?

在 rx-android 的示例项目中,到处都看到了 AppObservable。但我不知道如何正确处理注入的 Observables(或包含 Observables 的对象)。

非常感谢。

【问题讨论】:

    标签: android retrofit rx-java dagger rx-android


    【解决方案1】:

    不,我认为 AppObservable 不是必须的。

    如果您检查AppObservable source code,很明显 AppObservable 有助于确保在已销毁/分离后不会将任何项目转发到片段。

    据我了解,您可以在发出项目之前调用 isUnsubscribed 以及取消订阅 onDestroyView 中的订阅。应该够了。

    另见:

    【讨论】:

    • 似乎 AppObservable 用于在 Activity / Fragment 内初始化的 Observables。使用由 DI 框架(例如 Dagger)维护/注入的 Observables,它就不是那么有用了。这是正确的吗?
    • AppObservable 用于 Activity 和 Fragment。 Dagger 并没有处理取消订阅的问题。你也可以在 Github 上查看 u2020。我认为这是使用 Dagger 和 RxAndroid 构建应用程序的良好开端。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    相关资源
    最近更新 更多