プレゼンター内で非同期タスクを開始することができ、プレゼンターはアクティビティー/フラグメントのライフサイクルを処理します。これはMVPアーキテクチャ
アクティビティ/フラグメントが破棄されると、非同期タスクがバックグラウンドで実行されます。したがって、onPostExecute中にクラッシュします。したがって、プレゼンターの中にアクティビティ/フラグメントの状態を保存することがベストプラクティスです。プレゼンターは、アクティビティがライブであれば、新しいアクティビティに切り替えるためのアクティビティへのコールバックを提供します。
は、私はあなたがプレゼンターをデタッチし添付するonStopとonResumeを使用することができます
public interface BaseFirstActivity {
void switchActivity();
}
public class FirstActivity extends AppCompatActivity implements BaseFirstActivity {
FirstActivityPresenter firstActivityPresenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firstActivityPresenter = new FirstAcitivtyPresenterImpl(this);
firstActivityPresenter.fetchDB();
}
@Override
public void switchActivity() {
// do switching
}
@Override
protected void onDestroy() {
firstActivityPresenter.onDestroy();
super.onDestroy();
}
}
public interface FirstActivityPresenter {
void onDestroy();
void fetchDB();
}
public class FirstAcitivtyPresenterImpl implements FirstActivityPresenter {
private BaseFirstActivity baseFirstActivity;
public FirstAcitivtyPresenterImpl(BaseFirstActivity baseFirstActivity) {
this.baseFirstActivity = baseFirstActivity;
}
@Override
public void onDestroy() {
baseFirstActivity = null;
}
@Override
public void fetchDB() {
//do asyntask and after fetching
if (baseFirstActivity != null)
baseFirstActivity.switchActivity();
}
}
例をお見せしましょう。また、同じコールバックメカニズムをAsynTask別のクラスとして使用することができます