-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方法不能轻易中断(见评论)。更多信息在这里: 所以回答

于 2012-10-17T21:05:56.717 回答