android - 避免在屏幕方向更改时重启 fragment 异步任务

标签 android android-fragments android-asynctask android-fragmentactivity android-orientation

我正在开发一个 Android 平板电脑应用程序,我需要实现屏幕方向(横向和纵向)。当屏幕方向改变时, fragment asyntactask 再次重新启动。 (有时应用程序崩溃)我需要停止重新启动异步任务并再次请求数据。想要将现有的 json 数据加载到新屏幕中。 任何帮助表示赞赏。

approch: android:configChanges="keyboardHidden|orientation|screenSize" 不工作,因为我使用了 fragment 类。

最佳答案

您可能会发现一些 hack(包括静音配置更改或保留实例)以某种方式使其工作,但实际上 AsyncTasks are evil大多数时候你应该尽可能远离它。

如果您当前的 AsyncTask 的工作是在您的 Fragment 中显示之前从网络加载一些数据,我建议使用 AsyncTaskLoader . javadoc 中的示例应该可以让您很好地了解如何实现它。

这将允许网络请求在您旋转时继续进行,仅在准备好处理结果时通知 UI(即 LoaderManager.LoaderCallbacks)(因此在旋转时不会)例如),并且还将缓存结果,这样您就不会在每次需要数据时都重新发出网络请求。

有很多第三方库也试图解决这个非常常见的问题,Loader 也有其复杂之处,但如果我正确理解您的用例,它应该正是您所需要的需要。

不要忘记,无论您选择什么解决方案,都必须考虑到数据加载之前、期间和之后发生的轮换( Activity 销毁/重新创建)。

关于android - 避免在屏幕方向更改时重启 fragment 异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21426854/

相关文章:

android - 操作系统错误 : [Errno 2] No such file or directory when running systrace.

android - Android 中发送大数据到服务器的最佳方式

android - AsyncTask block UI 线程

android - AsyncTask.execute() 安全

android - Gson 2.2.2 仅在 4.2.1 上导致 stackoverflow

android - 如何在android中的ConstraintLayout中重叠元素?

java - 几种口味的 Kotlin 配置

android - 如何在android fragment中添加带有 ListView 和搜索功能的自定义对话框

button - 在Android片段中为我们评分

android - 在 fragment 之间导航时的 fragment 生命周期?