【问题标题】:How to prevent my Asynctask from executing again after rotating the screen?如何防止我的 Asynctask 在旋转屏幕后再次执行?
【发布时间】:2020-03-07 18:49:46
【问题描述】:
对于一个大学项目,我需要开发一个从 API 检索 JSON 数据并将其显示在 RecyclerView 中的 Android 应用程序。应用程序要求之一是更改屏幕方向后不应重新执行 Asynctask。换句话说,一旦执行了 Asynctask 并且 RecyclerView 与检索到的数据一起显示,它不应该在旋转屏幕后再次检索数据。
出于演示目的,我在 onPostExecute 方法中添加了一个 toast,用于显示已显示的项目数量:
如您所见,旋转屏幕后 toast 再次出现,这意味着 Asynctask 被重新执行。我想防止这种情况发生,但我不知道怎么做。
【问题讨论】:
标签:
java
android
android-asynctask
【解决方案1】:
尝试将此行添加到清单文件的活动标记中。
<activity name= ".YourActivity" android:configChanges="orientation|screenSize"/>
当您编写此参数时,您不想处理活动中的任何内容,但 Android 会处理此问题。它将保持活动的现有状态。
如果您在横向使用不同的布局文件,此方法会破坏您的布局,因此您可以采用一些替代方法来保持状态。
在您的活动中覆盖onSaveInstanceState 方法并在Bundle 中添加一些参数
protected void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
bundle.putLong("param", value);
}
并恢复onCreate 中的值以确保已创建状态。
public void onCreate(Bundle bundle) {
if (bundle != null){
value = bundle.getLong("param");
}
}