ここ数ヶ月で気づいたことがあります。ボタンに clickListener を設定して AsyncTask を実行すると、常に実行されるとは限りません。この問題を解決するには、AsyncTask を実行するコード行をメソッドでラップします。
常に機能しないコードは次のとおりです。
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new CustomAsyncTask().execute();
}
});
これが私の修正です:
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
executeAsyncTask();
}
});
public void executeAsyncTask(){
new CustomAsyncTask().execute();
}
いつ壊れて壊れないかというパターンに気づいていませんが、他の誰かがこれに気づいたのではないかと思いますか?
また、なぜこれが起こるのかについて誰かが説明を持っていれば、それもクールです.
前もって感謝します。
編集
これがCustomAsyncTaskです(何も出力しないため、常に呼び出されているわけではありません)
private class CustomAsyncTask extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
Log.i("CustomAsyncTask", "doInBackground");
return null;
}
}