程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 停止子線程-back鍵監聽,子線程關不掉!急!!!!

停止子線程-back鍵監聽,子線程關不掉!急!!!!

編輯:編程綜合問答
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();
            }
        }
    }
}

最佳回答:


自己解決了,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;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved