【问题标题】: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");
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    相关资源
    最近更新 更多