作者NightPrince (shooting star)
看板java
标题Re: [问题] android wait/force close 视窗
时间Sun Feb 14 11:55:24 2010
※ 引述《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)
1F:推 diousk:感谢!! 02/14 13:19
2F:推 brianhsu:BTW,如果要用 Service 的话,请注意 2.x 的行为有变动 02/14 14:35
4F:→ NightPrince:楼上的 感谢提供讯息 公司一直都还在用1.5 来开发 XD 02/14 14:51