Android 带有对话框的线程正在侦听back键,但我希望主活动侦听back键

Android 带有对话框的线程正在侦听back键,但我希望主活动侦听back键,android,android-dialog,onkeydown,Android,Android Dialog,Onkeydown,我正在启动一个显示对话框的线程,如果我按back键(执行一些逻辑来停止线程),则不会调用活动的onKeyDown侦听器。这是因为它正在被对话的线程捕获。。。我怎样才能避免呢 这是我的代码: public static void getRemoteImage(final String url, final Handler handler) { Thread thread = new Thread(){ public void run() {

我正在启动一个显示对话框的线程,如果我按back键(执行一些逻辑来停止线程),则不会调用活动的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();
    }

如果使对话框可取消,则可以在活动中使用此代码。 那么您根本不必使用
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
方法不能轻易中断(参见注释)。更多信息请点击此处:

中断不会停止位图的下载:sma可能您需要在线程中添加以下内容:
catch(InterruptedException e){thread.currentThread().interrupt();}
以下是一些详细信息:没有中断的异常被调用,线程根本不会中断,因为BitmapFactory.decodeStream(bis)不能被打断,这是一种方法啊,对于具体的方法,请看: