Re: [問題] android wait/force close 視窗

看板java作者 (shooting star)時間14年前 (2010/02/14 11:55), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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)

02/14 13:19, , 1F
感謝!!
02/14 13:19, 1F

02/14 14:35, , 2F
BTW,如果要用 Service 的話,請注意 2.x 的行為有變動
02/14 14:35, 2F

02/14 14:36, , 3F
02/14 14:36, 3F

02/14 14:51, , 4F
樓上的 感謝提供訊息 公司一直都還在用1.5 來開發 XD
02/14 14:51, 4F
文章代碼(AID): #1BTtGlOS (java)
文章代碼(AID): #1BTtGlOS (java)