質問

たとえば、画面の向きが変更された後、アクティビティが終了すると、 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();
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top