有win32 编程经验的人都懂,windows是基于消息驱动模式的,通过注册窗口回调函数来处理系统push的消息。安卓借鉴windows的消息模型,带有消息循环的线程都有自己的Looper,MessageQueue消息队列和Handler,这里的Handler就是win32中注册的窗口回调函数,不同于 win32的是,这里的Handler对象不但能接受消息,还能向MessageQueue中push消息,下面来看一下他们之间的关系。 .NET CF框架中,UI是非线程安全的,工作线程不能直接修改UI线程中的UI属性;kjava没这麽麻烦,kjava允许工作线程直接修改UI线程中的UI属性,问题是多任务的时候,要考虑UI资源的同步问题;安卓平台中,UI组件也是非线程安全的,不允许工作线程直接修改UI线程的UI组件,那么安卓是怎么处理的呢? 安卓平台中消息线程都维护自己的消息队列,Looper,Handler,在A线程中,可以通过B线程的HandlerB向B线程的消息队列中push消息,B线程的HandlerB从自己的消息队列中获得并处理消息。可以看到跨线程访问的关键在于Handler,通过对方的Handler往对方的消息队列中push消息。 下面是伪代码 1.申明主线程和工作线程的Handler; private Handler mMainHandler, mChildHandler; 2.在主线程中,用工作线程的mChildHandler发送消息; 3.在工作线程中,用工作线程的mChildHandler处理消息; 4.反之也是如此; 细心的朋友可能会发现, mChildHandler对象在主线程和工作线程中都有调用,难道不存在线程同步安全问题? 作者:一尘 出处:http://wmj.cnblogs.com/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
[转载]Android跨线程访问模型
相关推荐
- 【学习路径】程序开发学习路径图
- 在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器 - CSDN博客
- Android WebView中打开相机拍照和选择相册 - CSDN博客
- Failed to resolve: com.android.support.constraint:constraint-layout:1.0.0-alpha9
- Android IM即时通信开发总结及代码 - 普洛提亚 - 博客园
- Meteor-Android-DDP通信 - 简书
- App 模块化实战经验总结 - 观千剑而后识器,操千曲而后晓声。 - 博客频道 - CSDN.NET
- FloatMath.sqrt 方法找不到 不支持 解决办法 - huahuahua333686的博客 - 博客频道 - CSDN.NET