1、UI线程为什么设计为单线程?
UI控件的操作不是线程安全的,对于多线程并发访问的时候,如果使用加锁机制会导致:
- UI控件的操作变得很复杂。
- 加锁的操作必定会导致效率下降。
所以android系统在UI操作上使用单线程机制。
2、更新UI有四种方式:
- 使用Handler消息传递机制:通过直接发送message,即sendMessage(); ;
- 使用AsyncTask异步任务;
- 使用runOnUiThread(action)方法;
- 使用Handler的post(Runnabel r)方法:通过发送Runnable接口,即Post(Runnable)这种方式最终会调用sendMessageDelayed;
Handler的post对线程的处理也不是真正start一个新的线程,而是直接调用了线程的run方法,这正是google煞费苦心搞一套
3、小结:
A 如果只是单纯的想要更新UI而不涉及到多线程的话,使用View.post()(view再封装,最终调用的还是handler.post())就可以了;
B 需要另开线程处理数据以免阻塞UI线程,像是IO操作或者是循环,可以使用Activity.runOnUiThread();
C 如果需要传递状态值等信息,像是蓝牙编程中的socket连接,就需要利用状态值来提示连接状态以及做相应的处理,就需要使用Handler + Thread的方式;
Handler的作用:主要是在其他后台线程中,通过handler这个媒介,向UI主线程发送Runnable对象(即代码段)
采用传递消息的方式,调用Handler中方法来处理消息更新视图。这种方式对于不是很频繁的调用是可取的。如果更新的较快,则消息处理会一直排队处理,这样显示会相对滞后。
D 如果是后台任务,像是下载任务等,就需要使用AsyncTask。
http://mobile.51cto.com/abased-490317.htm
http://blog.csdn.net/caiwenfeng_for_23/article/details/37579653