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

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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题