1

URL からイメージビューにイメージを取得しているときに、progressDialog を表示しようとしています。progressDialog を表示しようとすると、親アクティビティでウィンドウがリークしました...

奇妙なことは、このアクティビティに 2 つのフラグメントがあることです。最初のフラグメントでは、progressdialog を呼び出すのとまったく同じ方法が機能しますが、フラグメントを置き換えて再度作成しようとすると、クラッシュします。

これは、クラッシュした 2 番目のフラグメント内で使用している asynctask です。

class SkinPreviewImage extends AsyncTask<Void, Void, Void> {

    private ProgressDialog progressDialog;

    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog(getActivity());
        progressDialog.setMessage("Loading preview...");
        if(progressDialog != null) progressDialog.show();
        progressDialog.setOnCancelListener(new OnCancelListener() {
            public void onCancel(DialogInterface arg0) {
                SkinPreviewImage.this.cancel(true);
            }
        });
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            URL newurl = new URL(url); 
            Bitmap mIcon_val = BitmapFactory.decodeStream(newurl.openConnection().getInputStream());
            skinPreview.setImageBitmap(mIcon_val);
        } catch (IOException e) {
            Log.e("SkinStoreDetail", e.getMessage());
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void v) {
        if(progressDialog != null) progressDialog.dismiss();
    }
}

私はいくつかの同様の質問を見てきましたが、私の問題を解決するのに最も近いものは、私が使用していない親にグループアクティビティを使用しました。

助言がありますか?

4

1 に答える 1

1

で UI タスクを実行できないか、doInBackground()クラッシュします。オーバーライドonProgressUpdate()して、そこでそれを行います。詳細については、ドキュメントを参照してください: http://developer.android.com/reference/android/os/AsyncTask.html

于 2013-06-27T15:06:39.473 に答える