您的位置:首页 > 其它

Handler和Thread-----处理耗时比较长的操作

2012-07-04 16:33 246 查看
Handler和Thread-----处理耗时比较长的操作

参考网站:/article/5974370.html
http://tansitongba.iteye.com/blog/1583263

  在《解密Google Android》一书中,发现了这样一个启动线程的模型。利用该模型,我们可以把一些耗时的操作放到doStuff方法中去执行,同时在updateUIHere方法中进行更新UI界面的操作,就可以完成一个线程所需要的功能。其他的说明写在注释部分了。

Handler myHandler = new Handler() {
public void handleMessage(Message msg) {
updateUIHere();
}
}
new Thread() {
public void run() {
doStuff();         // 执行耗时操作
Message msg = myHandler.obtainMessage();
Bundle b = new Bundle();
b.putString("key", "value");
m.setData(b);    // 向消息中添加数据
myHandler.sendMessage(m);    // 向Handler发送消息,更新UI
}
}.start();


参考这个方法,我把耗时操作,放在新开的线程中,使用Handler得到线程中耗时操作所获得的数据,从而来对UI界面进行操作:
一:线程部分
Runnable myRunnable = new Runnable() {
public void run() {
/*********先睡一小段时间**********/
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
//读取最近联系人的数据
List<ContentValues> llistRenCont = ConnectRenContListDataHelper.getRenContList(
SmsDataHelper.getSmsDataList(MultiChoiceContactActivity.this),
CallLogDataHelper.getCallLogList(MultiChoiceContactActivity.this));

//读取群组的数据
/***********群组名数据**************/
List<ContentValues> llistGroupName = GroupDataHelper.getGroupDataList(MultiChoiceContactActivity.this);

/***********群组下各成员的数据**************/
List<ArrayList<ContentValues>> llistEachGroupItemData = GroupDataHelper.getGroupItemDataList(MultiChoiceContactActivity.this);

Message msg = onProRenAndGroHandler.obtainMessage();
msg.obj = llistEachGroupItemData;

Bundle bundle = new Bundle();
bundle.putParcelableArrayList(LISTGROUPNAME, (ArrayList<? extends Parcelable>) llistGroupName);
bundle.putParcelableArrayList(LISTRENCONT, (ArrayList<? extends Parcelable>) llistRenCont);

msg.setData(bundle);
msg.sendToTarget();
}
};
new Thread(myRunnable).start();


二:handler部分

private class OnProRenAndGroHandler extends Handler {

@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);

listEachGroupItemData = (List<ArrayList<ContentValues>>) msg.obj;

Bundle bundle = msg.getData();
listGroupName = bundle.getParcelableArrayList(LISTGROUPNAME);
listRenCont = bundle.getParcelableArrayList(LISTRENCONT);

UpdateUIHere();

}
}


第一步:定义Handler

public Handler onProRenAndGroHandler = null;

第二步,给Handler赋对象

onProRenAndGroHandler = new OnProRenAndGroHandler();

第三步:开线程,处理耗时操作

第四步:定义Handler类,得到数据,对UI进行操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: