は:onDestroy()
でmGDT.cancel(true)
を呼び出すAsyncTask内で複数のAsyncTaskを呼び出し、必要に応じて外部タスクを停止するのは安全ですか?私はこのようなものでした場合
public class MyFragment extends Fragment
{
private GetDataTask mGDT;
//onCreate() and onCreateView() are implied here
public void runTasks()
{
new TaskOne().execute();
new TaskTwo().execute();
new TaskThree().execute();
}
public class GetDataTask extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackground(Void... params)
{
runTasks();
}
}
@Override
public void onResume()
{
super.onResume();
mGDT = new GetDataTask();
mGDT.execute();
}
@Override
public void onDestroy()
{
super.onDestroy();
mGDT.cancel(true);
}
}
でしょうがrunTasks()
で実行している個々のAsyncTasksを終了しますか?このようなことを達成する最良の方法は何ですか?私は、Webからデータを収集する複数のボットを持っています。それぞれのスレッドを自分のスレッドに入れたいので、フラグメントやアクティビティが破棄された場合は、それらをすべてキャンセルする必要があります。私はAndroidプログラミングとマルチスレッドに慣れていないので、このタイプのマルチスレッドを実行する最良の方法に慣れていません。
、のような何かを行うことができますすべてのサブタスクをキャンセルする場合、あなたの場合は
、それは安全ですonDestroy()で 'cancel(true)'を呼び出すと、個々のスレッドは終了しますか?また、2番目の段落を詳しく説明するか、少なくともexecuteOnExecutorについて説明する良いリンクを教えてください。 –
'mGDT'がサブタスク(1,2,3)を起動したかどうかによって異なります。タスクを開始するmGDTのコードが実行されていない場合、mGDTをキャンセルすると、サブタスクがキャンセルされます(最初に実行されないように)。 mGDTがすでにサブタスクを開始している場合、mGDTをキャンセルしてもそれらはキャンセルされません。サブタスクでキャンセルを呼び出すために外部タスクでcancel()をオーバーライドしないでください。 –
re: 'executeOnExecutor()'。最良のことは 'Executor'のAPIドキュメントを読んで' AsyncTask'のソースコードを見て、それがどのように使われているのか見てみることです。 –