あなたはあなたに何を渡しますonRetainNonConfigurationInstance()
か?を含むオブジェクトをオブジェクトに渡してからAsyncTask
、の値を取得しようとしますgetLastNonConfigurationInstance()
。
編集:考え直してみると、構成変更後に何をしたいかによって異なります。を終了したい場合はAsyncTask
、それを呼び出しますcancel()
。向きを変えても処理を続けたい場合は、そのまま作業を続ける必要があります。
あなたはこのように保存することによってそれを行うことができActivity
ますAsyncTask
:
private MyAsyncTask searchTask;
@Override
public void onCreate(Bundle savedInstance){
super.onCreate(savedInstance);
if (getLastNonConfigurationInstance()!=null) {
SavedObject savedObj = (SavedObject)getLastNonConfigurationInstance();
searchTask = savedObj.getAsyncTask();
searchTask.attach(this);
} else {
searchTask = new MyAsyncTask(this);
searchTask.execute();
}
}
@Override
public Object onRetainNonConfigurationInstance(){
searchTask.detach();
final SavedObject savedObj = new SavedObject();
savedObj.setAsyncTask(searchTask);
return savedObj;
}
private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
MyActivity parentActivity = null;
MyAsyncTask (MyActivity activity) {
attach(activity);
}
void attach(MyActivity activity) {
this.parentActivity=activity;
}
void detach() {
parentActivity=null;
}
// Do your thread processing here
}
private class SavedObject {
private MyAsyncTask asyncTask;
public void setAsyncTask(MyAsyncTask asyncTask){
this.asyncTask = asyncTask;
}
public MyAsyncTask getAsyncTask() {
return asyncTask;
}
}