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

时间:2020-03-07 18:49:46

标签: java android android-asynctask

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

出于演示目的,我在onPostExecute方法中添加了一个烤面包,该烤面包显示了已显示的项目数量:

enter image description here

enter image description here

如您所见,旋转屏幕后,烤面包重新出现,这意味着Asynctask已重新执行。我想防止这种情况的发生,但是我不知道怎么办。

1 个答案:

答案 0 :(得分:0)

尝试将此行添加到清单文件的活动标签中。

<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");
  }
}