Android Handler详解
来源:互联网 发布:建筑软件行业 编辑:程序博客网 时间:2024/05/30 19:33
Android应用开发经常要进行网络操作,我们可采用AsyncTask和 Thread+Handler机制来实现 ,今天先总结 Thread+Handler 的使用方法,我们将网络操作放在Thread中,开发的时候要注意这一点,因为在Android2.3里面在网速给力的情况下,是不会出现anr异常的,but,在Android4.0往后所有的网络操作都必须放在线程或者异步任务里面,否则汇报一个异常,这个异常不怎么起眼(logcat打印为黄色),初学者经常会犯这个错误,所以我们要养成将网络操作放在线程和异步任务里面。
看代码:
首先我们要创建一个handler的实例,然后覆写其handleMessage()方法,这里方法体的操作为更新界面的操作。
private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {mMarkers = new ArrayList<Marker>();markerInfos = (List<MarkerInfo>) msg.obj;LatLng llA = null;OverlayOptions ooA = null;for (MarkerInfo markerInfo : markerInfos) {llA = new LatLng(markerInfo.getLongtitude(), markerInfo.getLatitude());ooA = new MarkerOptions().position(llA).icon(bdA).zIndex(9).draggable(true);mMarkers.add((Marker) (mBaiduMap.addOverlay(ooA)));// 将位置添加至地图}};};
耗时操作:
new Thread(new Runnable() {@Overridepublic void run() {try {while (FLAG) {markerInfos = MarkerService.getMarkerInfo(RoutePlanActivity.this, 31.4874500000, 120.3826130000);Message msg = handler.obtainMessage();msg.obj = markerInfos;Thread.sleep(1000);handler.sendMessage(msg);}} catch (Exception e) {e.printStackTrace();}}}).start();
这里使用handler.obtainMessage();方法获取一个Message对象,虽然我们可以直接new 一个Message对象出来,但是handler机制为我们提供了消息池,所以开发时我们应该使用 handler.obtainMessage()方法是从消息池取消息,可以增强应用性能。
handler提供了多个方法来发送消息:
post(Runnable r)
//执行一个在主线程的操作postAtFrontOfQueue(Runnable r)
//post一个消息给一个继承自runnable的对象postAtTime(Runnable r, long uptimeMillis)
//在指定的时间
postDelayed(Runnable r, long delayMillis)
sendEmptyMessage(int what)
//发送一个空消息sendEmptyMessageAtTime(int what, long uptimeMillis)
//在制定的时间发送消息sendEmptyMessageDelayed(int what, long delayMillis)//延迟delayMillis的时间发送空消息
sendMessage(Message msg)
//发送一个普通的消息sendMessageAtFrontOfQueue(Message msg)
//发送一个消息,这个消息位于消息队列的前端sendMessageAtTime(Message msg, long uptimeMillis)
//发送消息在指定的时间sendMessageDelayed(Message msg, long delayMillis)
//延时发送消息
总结:
以post开头的方法有个Runnable参数,这个的意思是在主线程中的操作,切记,一些后台的操作用send开头的方法就不会出现anry异常了。。。。
AsynTask以后再讲吧。
- Android Handler详解
- Android Handler详解
- Android Handler详解(转)
- Android handler详解
- Android Handler详解
- 详解android Handler使用
- android handler详解
- android Handler详解
- Android Handler详解
- Android Handler机制详解
- Android Handler详解
- android handler 更详解
- android handler详解
- android handler详解
- Android Handler机制详解
- android Handler 详解
- android中handler详解
- Android Handler 详解
- ubuntu,eclipse下用maven创建hadoop项目总结
- 软件架构概念
- membership(4)---API篇
- 网络相关知识
- hdu 2538 确定排名
- Android Handler详解
- 3DSMAX中英文对照大全(从A-Z分类)
- PLSQL使用技巧
- CGI编程入门--GET与POST示例
- xcode 工具设置
- 简单有效的Unity3D分辨率适应教程
- 陪女儿打造的简单显微镜
- 过河卒,茶人故事
- HDOJ 题目4046 Panda(树状数组)