Re: [問題] android wait/force close 視窗
※ 引述《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
02/14 14:35, 2F
→
02/14 14:36, , 3F
02/14 14:36, 3F
→
02/14 14:51, , 4F
02/14 14:51, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):