nowhere___boy
2014-09-22 07:19
采纳率: 100%
浏览 1.7k
已采纳

back键监听,子线程关不掉!急!!!!

今天做判断加载文件超时时用到了一个子线程,我的方法就是开始加载文件时,开启这个子线程,让它不停的循环,判断加载时间是否超过30秒,超过就发送一个超时的信息,现在问题就是, 加载的时候会弹出一个进度框,这时候子线程已经开始不停的循环判断了,我想点back键,停止线程,但线程一直循环,onKeyDown();一直无法抢到时间片,执行不了 线程停止语句; `

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if(keyCode ==KeyEvent.KEYCODE_BACK){
        overTimeUtil.stop();
    }


    return super.onKeyDown(keyCode, event);
}

   /**
 * 停止 超时检测线程
 */
public void stop() {
    isStopThread = true;

}


class  TimeThread extends Thread {


    @Override
    public void run() {

        while (!isStopThread) {
            try {
                Thread.sleep(100);
                currentTime = System.currentTimeMillis();
                String strMsg = String.format("times = %d",
                        currentTime - startTime);
                Log.v("TAG", strMsg);

                if (isLoadFinish) { //报障类型加载完成,跳出循环
                    break;
                } else {
                    if ((currentTime - startTime) >= timeRange) {
                        Message msg = new Message();
                        msg.what = OverTimeUtil.OVERTIME;
                        handler.sendMessage(msg);
                        break;
                    }
                }
            } catch (InterruptedException e) {

                e.printStackTrace();
            }
        }
    }
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • nowhere___boy 2014-09-23 03:26
    已采纳

    自己解决了,alertdialog有个属性setCancelable()设置关闭窗口,如果为true,就是点击返回键和窗口以外的地方 提示框都会关闭,false 就点击没有效果;

    如果只想点击返回键关闭提示框,就alertdialog.setOnKeyListener();设置下按键监听

                   private ProgressDialog pd;
                    pd.setCancelable(false);//系统默认false,true:按返回键或者按pd以外的地方 都会退出pd
                    pd.setOnKeyListener(XXXXActivity.this);//设置返回键监听
    
    @Override
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
            if(pd !=null){
                pd.dismiss();
    
            }
        }
    
        return false;
    }
    
    点赞 打赏 评论

相关推荐 更多相似问题