Android Asynctaskコンテキストが終了しました
-
25-09-2019 - |
質問
たとえば、画面の向きが変更された後、アクティビティが終了すると、 AsyncTask
アクティビティコンテキスト?それ以外の場合は、アクティビティが終了したときにエラーが発生します AsyncTask
のアクティビティコンテキストもなくなりました。
私の宿題は次のとおりです。
public void onSaveInstanceState(Bundle savedInstanceState) <- doesn't solve
public Object onRetainNonConfigurationInstance() <- doesn't solve
android:configChanges="keyboardHidden|orientation"
<- solved but doesn't handle well relative layouts
解決
あなたは何を渡しますか 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;
}
}
他のヒント
asynchタスクのoncancelメソッドでfinish();
public void onCancel(DialogInterface dialog) {
cancel(true);
dialog.dismiss();
finish();
}
所属していません StackOverflow