[转载]Android跨线程访问模型

[转载]安卓跨线程访问模型 – 一尘 – 博客园.

有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/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏