Что вы передаете на 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;
}
}