我正在开发一个 Android 平板电脑应用程序,我需要实现屏幕方向(横向和纵向)。当屏幕方向改变时, fragment asyntactask 再次重新启动。 (有时应用程序崩溃)我需要停止重新启动异步任务并再次请求数据。想要将现有的 json 数据加载到新屏幕中。 任何帮助表示赞赏。
approch: android:configChanges="keyboardHidden|orientation|screenSize"
不工作,因为我使用了 fragment 类。
最佳答案
您可能会发现一些 hack(包括静音配置更改或保留实例)以某种方式使其工作,但实际上 AsyncTask
s are evil大多数时候你应该尽可能远离它。
如果您当前的 AsyncTask
的工作是在您的 Fragment
中显示之前从网络加载一些数据,我建议使用 AsyncTaskLoader
. javadoc 中的示例应该可以让您很好地了解如何实现它。
这将允许网络请求在您旋转时继续进行,仅在准备好处理结果时通知 UI(即 LoaderManager.LoaderCallbacks
)(因此在旋转时不会)例如),并且还将缓存结果,这样您就不会在每次需要数据时都重新发出网络请求。
有很多第三方库也试图解决这个非常常见的问题,Loader
也有其复杂之处,但如果我正确理解您的用例,它应该正是您所需要的需要。
不要忘记,无论您选择什么解决方案,都必须考虑到数据加载之前、期间和之后发生的轮换( Activity 销毁/重新创建)。
关于android - 避免在屏幕方向更改时重启 fragment 异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21426854/