EditText と AsyncTask クラスがあります。EditText でテキストが変更されるたびに、AsyncTask クラスのオブジェクトが作成され、その文字列で execute() が呼び出されます。そして doBackground() が呼び出され、関数は 1 つだけで、その関数には複数の for ループが次々と含まれます。テキストが変更されるたびに、AsyncTask の新しいオブジェクトが作成されます。テキストが変更されたら、古い Async オブジェクトをキャンセルして、新しいオブジェクトが制御を引き継ぐ必要があります。しかし、オブジェクトでキャンセルを呼び出すと、古いオブジェクトは引き続き実行され、onPostExecute() を呼び出すようです。これを回避する方法はありますか。つまり、新しい asyncTask オブジェクトを実行する前に、古い asyncTask オブジェクトを完全に kill/(実行を停止) することはできますか?
編集 これは私のコードです、
if (getSuggestions1.getStatus() != AsyncTask.Status.RUNNING) {
getSuggestions1.cancel(true);
getSuggestions1 = new GetSuggestions1();
getSuggestions1.execute(new String[] { str });
}
ご覧のとおり、同じオブジェクトでキャンセルを呼び出した直後に execute() を呼び出しています。また、私が言ったように、複数の for ループ (6) があります。オブジェクトがすぐに初期化されるため、関数 isCancelled() が for ループの 1 つに対して true を返すのではないかと心配しています。