您的位置:首页 > 产品设计 > UI/UE

简述Andriod如何处理UI与耗时操作的通信,有哪些方式及各自的优缺点。

2015-09-08 11:37 495 查看
1.Handler方式:这种方式是Android中最重要的消息传递机制,通过Handler,Looper,MessageQueue三者的协作完成消息的传递,

 实现简单原理:Handler发送通过sendmessage()发送消息,及把消息插入到messagequeue中,Looper不断的通过loop()方法轮询

 消息队列,如果里面有消息,就将消息取出并通过msg.targer.dispatchMessage() 去分发消息。然后Handler在UI线程中

 通过handlerMessage()去处理消息

 优点:使用范围广,可追踪方便调试,通信的载体是消息,而消息可以包括各

 种数据类型,还可以传递对象 

 缺点:原理较复杂 

当执行耗时操作时,新建一个线程,在这个线程中执行耗时操作,通过调用handler的sendMessage,post等方法,更新ui界面;

2.AsyncTask本质上是一个线程池,所有的异步任务都会在这个线程池中的工作线程中执行,当需要操作ui界面时,会和工作线程通过handler传递消息。

3.自己开子线程执行耗时操作,然后调用Activity的runOnUiThread()方法更新ui,这种方法需要把context对象强制转换成activity后使用

3、启用Service和broadcast广播

 广播机制:通过系统广播或者自定义的广播去

 实现UI线程与耗时操作线程之间的通信 

 优点:实现简单 

 缺点:不利于调试,且消息传递不够灵活,会存在安全问题 

5、post()

6.EventBus:EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。

 比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现 

 优点:针对一个进程,解耦

 缺点:大量使用会不利于调式 

3、启用Service和broadcast广播

5、post()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程