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方法中,Put finish();
public void onCancel(DialogInterface dialog) {
cancel(true);
dialog.dismiss();
finish();
}
不隶属于 StackOverflow