当活动终止时,例如,屏幕方向更改后,可以更改 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();
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top