みんなおはよう、
インターネットから画像をダウンロードする非同期タスクがあります。名前の付いた 3 つのボタンがあり、既にダウンロードしている名前とは異なる名前が押された場合は、タスクをキャンセルして新しい名前で開始したいと考えています。
DownloadImageTask downloadPicTask = null;
int tasksRunning;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.detail, container, false);
fillData();
return rootView;
}
public void fillData(){
if(downloadPicTask != null){
Log.i(TAG,"Trying to cancel task...");
downloadPicTask.cancel(true);
}else{
Log.i(TAG,"why why why");
}
...
downloadPicTask = new DownloadImageTask(imageView);
downloadPicTask.execute(firstName,lastName);
tasksRunning = tasksRunning + 1;
Log.i(tag,String.valueOf(tasksRunning));
...
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
boolean canceled = false;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
@Override
protected void onCancelled() {
Log.i(TAG, "Async Cancelled");
canceled = true;
}
protected Bitmap doInBackground(String... params) {
... //downloading the bitmap here
}
protected void onPostExecute(Bitmap result) {
if(!canceled){
bmImage.setImageBitmap(result);
}
}
}
何らかの理由で、最初のタスクが開始され、別の名前を押すと、downloadPicTask が null を返すため、キャンセルされません。これは、最初のキャンセル試行でのみ発生します。 タスクが null を返す場合でも、正常に実行され、終了時にイメージビューが設定されます。最初の downloadPicTask が null を返さなくなった後は、その後のタスクのキャンセルは成功します。
誰でもこれについて考えていますか?