屏幕旋转时如何使用AsyncTask

时间:2015-10-06 09:44:09

标签: android android-asynctask screen-orientation

我的Android应用中有一项活动,在asynctask

上调用onCreateView()

这是我的代码:

 @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());
}

所以我再次使用恢复的数据回忆起asynctask,我的问题是当旋转时活动再次运行并且它调用onRestoreInstanceState,那么我怎么能阻止活动调用第一个asyncktask?

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

2 个答案:

答案 0 :(得分:2)

我建议你确保你确实需要在屏幕旋转时重置你的活动(默认行为)。每次我遇到轮换问题时,我都会在AndroidManifest.xml中将此属性添加到我的代码中,并且很好。

机器人:configChanges =" keyboardHidden |取向"

来源How to handle an AsyncTask during Screen Rotation?

答案 1 :(得分:1)

AndroidManifest.xml添加以下内容,以防止在方向更改时重新加载活动

android:configChanges="orientation|screenSize"

所以,你会有这样的事情:

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

希望它有效!