0

AsyncTask の「doInBackGround」メソッドの実行中にメインスレッドからダイアログをキャンセルしようとしています。写真のダウンロード中に進行状況ダイアログがポップアップ表示され、ダウンロードが完了すると onPostExecute でダイアログを dismiss() します。接続が遅い場合、ダイアログがしばらく表示され、タイムアウト エラーが発生するか、ダウンロードが完了するまでキャンセルできません。メインスレッドがアクセスできるように戻るボタンを使用するにはどうすればよいですか。私のコードは次のようになります。

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {


    protected void onPreExecute() {
        //this piece code doesn't seem to work
        progressDialog = ProgressDialog.show(context, "",
                "Image loading", true);
    }

    protected Bitmap doInBackground(String... urls) {
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        //bmImage.setImageBitmap(result);
        progressDialog.dismiss();
        someMethod(result);

    }
}
4

3 に答える 3

1

キャンセル可能な進行状況ダイアログを使用し、キャンセル リスナーを進行状況ダイアログに渡し、そのメソッド内でタスクをキャンセルします。

protected void onPreExecute() {
    progressDialog = ProgressDialog.show(activity, "Searching files", "Scanning...", true, true,
            new DialogInterface.OnCancelListener() {
                @Override
                public void onCancel(DialogInterface dialog) {
                    // When dialog in cancelled, need to explicitly cancel task otherwise it keeps on running
                    cancel(true);
                }
            }
    );

    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
}
于 2013-03-12T16:28:12.693 に答える
1

イベントをインターセプトし、メソッドonBackKeyPressedを使用してタスクをキャンセルできます。cancel

そのリンクを参照してください: 実行中の AsyncTask をキャンセルする理想的な方法

于 2013-03-12T16:18:06.503 に答える
0

ProgressDialogである aを使用してみることができますcancelable。これはメソッドの署名です:-

public static ProgressDialog show (Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable)
于 2013-03-12T16:20:05.833 に答える