-1

ダイアログを表示するスレッドを起動しています。(スレッドを停止するロジックを実行するために) 戻るキーを押すと、アクティビティの onKeyDown リスナーが呼び出されません。ダイアログのあるスレッドにキャッチされているためです...どうすれば回避できますか?

これは私のコードです:

public static void getRemoteImage(final String url, final Handler handler) {
        Thread thread = new Thread(){ 
            public void run() {
                try {
                    Looper.prepare();
                    handler.sendEmptyMessage(Util.SHOW_DIALOG);
                    final URL aURL = new URL(url);
                    final URLConnection conn = aURL.openConnection();
                    conn.connect();
                    final BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
                    image = BitmapFactory.decodeStream(bis);
                    bis.close();
                    handler.sendEmptyMessage(Util.HIDE_DIALOG); 
                    Looper.loop();  
                }catch (Exception e) {e.printStackTrace();}
            }
        };
        thread.start();
    }
4

1 に答える 1

0

ダイアログをキャンセル可能にすると、アクティビティでこのコードを使用できます。それなら全く使う必要はありませんonKeyDownListener。戻るボタンは、onCancel()メソッドを自動的に呼び出します。

コードは次のonCreateDialogようになります。

updatingDialog = new ProgressDialog(this);
updatingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
updatingDialog.setMessage(getString(R.string.busy));
updatingDialog.setCancelable(true);
updatingDialog.setOnCancelListener(new OnCancelListener() {
    public void onCancel(DialogInterface dialog) {
        thread.interrupt();
    }
    });

どうやら、decodeStreamメソッドを簡単に中断することはできません (コメントを参照)。詳細はこちら: SOの回答

于 2012-10-17T21:05:56.717 に答える