屏幕旋转时如何使用 AsyncTask

How to work with AsyncTask when screen rotates

我的 android 应用中有一个 activity 在 onCreateView()

上调用 asynctask

这是我的代码:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_weeklyprofit);
            fromDateTxt=(TextView)findViewById(R.id.fromDate);
            toDateTxt = (TextView)findViewById(R.id.toDate);

         GetXYPoints getXY = new GetXYPoints();
         getXY.execute(fromDateTxt.getText().toString(),toDateTxt.getText().toString());

}

现在我的应用程序需要旋转,所以我需要在旋转时存储数据:

我已经实现如下:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);

    savedInstanceState.putString("from", fromDateTxt.getText().toString());
    savedInstanceState.putString("to", toDateTxt.getText().toString());

}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    SystemClock.sleep(500);
    fromDateTxt.setText(savedInstanceState.getString("from"));
    toDateTxt.setText(savedInstanceState.getString("to"));

     GetXYPoints getXY = new GetXYPoints();
     getXY.execute(fromDateTxt.getText().toString(),toDateTxt.getText().toString());
}

所以我再次回忆起恢复数据的异步任务,我的问题是 activity 运行 在旋转时再次调用并且它调用 onRestoreInstanceState 所以我如何防止 activity 从调用第一个异步任务?

换句话说,当屏幕旋转时存储异步任务返回的数据的最佳解决方案是什么?

在您的AndroidManifest.xml中添加以下内容以防止在方向改变时重新加载activity

android:configChanges="orientation|screenSize"

所以,你会得到这样的东西:

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

希望有用!

我建议您确保您确实需要 activity 在屏幕旋转时重置(默认行为)。每次我遇到旋转问题时,我都会将此属性添加到我在 AndroidManifest.xml 中的标记中,并且一切正常。

android:configChanges="keyboardHidden|orientation"

来源How to handle an AsyncTask during Screen Rotation?