看板 java 關於我們 聯絡資訊
※ 引述《diousk (~Sharek~)》之銘言: : 請問一下 : android上寫java拿進去跑時 : 有時候會因為等待太久(上網擷取資料等等) : 跑出 wait/force close的視窗 : 請問有沒有辦法去讓這個視窗不要跳出來 : 或是延長他判斷的時間呢(ex 等10 sec 再跳出來)? 這個是 ANR ( Application Not Responding) issue Official guideline: http://ppt.cc/nzFG 簡單說就是 UI thread 等候超過五秒等不到訊息就跳出這個視窗給你 傳統做法就是把耗時的處理丟給 service or thread 去跑 跑完在 show UI,要注意的是這樣的做法會延伸出 non UI thread 要 show UI的問題,而一般通用解法就是藉由 handler 從 non UI thread 丟訊息給 UI thread ,叫他去進行更新 UI的動作 底下的 sample code 是懶人用法,有時我會跟 service 綁定 藉由 AIDL 註冊一個 callback method 給 service 當事情處理完去 invoke 只不過那樣做很麻煩 XDD Sample code: private Handler handler; private boolean isDestroyed = false; public void onCreate(Bundle savedInstanceState) { . . KerKerThread kerker = new KerKerThread(); kerker.start(); kerker.setStart(true); handler = new Handler() { public void handleMessage(Message m) { switch (m.what) case 0: //put update UI codes here break; } } } public void onDestroy() { super.onDestroy(); isDestroyed = true; } class KerKerThread extends Thread { private boolean isStart = false; public void run() { while (!isDestroyed) { if (isStart) { // put the time-consuming process here; Message m = new Message(); m.what = 0; handler.sendMessage(m); } } } public void setStart(boolean b) { isStart = b; } } that's all! FYI -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.127.128.4 ※ 編輯: NightPrince 來自: 59.127.128.4 (02/14 11:58)
diousk:感謝!! 02/14 13:19
brianhsu:BTW,如果要用 Service 的話,請注意 2.x 的行為有變動 02/14 14:35
brianhsu:Ref: http://0rz.tw/OZz4g 02/14 14:36
NightPrince:樓上的 感謝提供訊息 公司一直都還在用1.5 來開發 XD 02/14 14:51