今天做判斷加載文件超時時用到了一個子線程,我的方法就是開始加載文件時,開啟這個子線程,讓它不停的循環,判斷加載時間是否超過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;
}