gpt4 book ai didi

Android 在旋转设备上管理多请求 rxJava

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:55:45 25 4
gpt4 key购买 nike

我在 Android 应用程序上使用 MVVM,我想在设备轮换时管理请求和 rxJava,如何在轮换设备后禁用请求并从上次请求开始继续?

这是我知道如何做的简单代码,但我找不到任何关于它的文档和示例代码

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

binding = DataBindingUtil.setContentView(this, R.layout.activity_register);
...
Observer<String> myObserver = new Observer<String>() {
@Override
public void onError(Throwable e) {
// Called when the observable encounters an error
}

@Override
public void onComplete() {

}

@Override
public void onSubscribe(Disposable d) {

}

@Override
public void onNext(String s) {
// Called each time the observable emits data
Log.e("MY OBSERVER", s);
}
};

Observable.just("Hello").subscribe(myObserver);
}

我正在使用最新版本的 rxJava

最佳答案

在 Android 中处理旋转是一项很酷的挑战。有几种方法可以做到这一点。

1- 服务:您可以使用服务并处理您的网络请求或服务中的其他后台操作。此外,通过服务,您可以将业务逻辑与 ui 分开。

2- Worker Fragment: Worker fragment 是一个没有布局的 fragment 实例。您应该将工作 fragment 的 retainInstanceState 设置为 true。因此,您将保存您的 fragment 免受方向变化,并且不会丢失您的后台操作。

为什么使用 Worker Fragment?如果您将 retainInstanceState 设置为带有布局的 fragment ,就会泄漏 View 。

如果您使用 MVVM,您可以将 ViewModel 实现为一个 Worker Fragment,它是 setRetainInstanceState = true

3- 全局单例数据源:您可以创建一个全局单例数据源类,它在应用程序中的 Activity/Fragment 生命周期的独立范围内处理您的操作。

4- Loaders: Loaders 可以从方向变化中恢复状态。您使用加载程序处理您的操作,但它们旨在从磁盘加载数据并且不太适合长时间运行的网络请求。

额外:您可以使用Path's Priority Job Queue 来持久化您的作业: https://github.com/path/android-priority-jobqueue

编辑:您可以查看我的存储库以了解如何在不使用 Google 的新架构组件的情况下处理设备轮换。 (作为我在回答中指出的 Worker Fragment 的示例。) https://github.com/savepopulation/bulk-action

关于Android 在旋转设备上管理多请求 rxJava,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42887943/

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