如何防止我的 Asynctask 在旋转屏幕后再次执行?

How to prevent my Asynctask from executing again after rotating the screen?

对于一个大学项目,我需要开发一个 Android 应用程序,它从 API 检索 JSON 数据并将其显示在 RecyclerView 中。应用要求之一是在更改屏幕方向后不应重新执行 Asynctask。换句话说,一旦 Asynctask 被执行并且 RecyclerView 显示了检索到的数据,它不应该在旋转屏幕后再次检索数据。

出于演示目的,我在 onPostExecute 方法中添加了 toast,显示已显示的项目数量:

可以看到,旋转屏幕后toast又出现了,说明Asynctask重新执行了。我想防止这种情况发生,但我不知道该怎么做。

尝试将此行添加到清单文件的 activity 标记中。

<activity name= ".YourActivity" android:configChanges="orientation|screenSize"/>

当您编写此参数时,您不想在 activity 中处理任何内容,但 Android 会处理此问题。它将保持 activity.

的现有状态

如果您为横向使用不同的布局文件,此方法会破坏您的布局,因此您可以采用一些替代方法来保持状态。

覆盖 activity 中的 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");
  }
}