中博教育南京中博校区

中博教育2013年招生简章
公开课·讲座
讲座主题:

学什么技术有前途

讲座时间:

星期天下午

讲座地点:

中博教育中博校区

主讲老师:

管老师

人数限额:

30

抢座热线:

17368476151

我要定座

?

android开发之多线程实现方法概述

与在线专业老师直接对话交流
时间:2015-03-27 16:55  来源:未知  
一、单线程模型 
当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。所以主线程通常又被叫做UI线程。
在开发Android 应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。
如果在非UI线程中直接操作UI线程,会抛出android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views,这与普通的java程序不同。
由于UI线程负责事件的监听和绘图,因此,必须保证UI线程能够随时响应用户的需求,UI线程里的操作应该向中断事件那样短小,费时的操作(如网络连接)需要另开线程,否则,如果UI线程超过5s没有响应用户请求,会弹出对话框提醒用户终止应用程序。
如果在新开的线程中需要对UI进行设定,就可能违反单线程模型,因此android采用一种复杂的Message Queue机制保证线程间通信。

Message Queue:

Message Queue是一个消息队列,用来存放通过Handler发布的消息。Android在第一次启动程序时会默认会为UI thread创建一个关联的消息队列,可以通过Looper.myQueue()得到当前线程的消息队列,用来管理程序的一些上层组件,activities,broadcast receivers 等等。你可以在自己的子线程中创建Handler与UI thread通讯。 
通过Handler你可以发布或者处理一个消息或者是一个Runnable的实例。每个Handler都会与唯一的一个线程以及该线程的消息队列管理。
Looper扮演着一个Handler和消息队列之间通讯桥梁的角色。程序组件首先通过Handler把消息传递给Looper,Looper把消息放入队列。Looper也把消息队列里的消息广播给所有的Handler,Handler接受到消息后调用handleMessage进行处理。
(以上转自http://www.cnblogs.com/nio-nio/archive/2012/07/23/2604900.html)
二、多线程的实现
有以下几种方式:  

1)Activity.runOnUiThread(Runnable)  

2)View.post(Runnable) ;View.postDelay(Runnable , long)  

3)Handler  

4)AsyncTask  

Android是单线程模型,这意味着Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行,所以你单纯的new一个Thread并且start()是不行的,因为这违背了Android的单线程模型。那么如何用好多线程呢?总结一下:  
事件处理的原则:所有可能耗时的操作都放到其他线程去处理。 
 对于第一种方法:
activity.runOnUiThread(new Runnable() {               
            @Override 
            public void run() {  
                // TODO Auto-generated method stub  
                   int i = 30;
                   textView.setText(""+i+" s");
                   }
            }  
        });  
第2,3种方法网络上资料较多,不再赘述。第4种方法在上一篇博文中已经介绍。
 
三、总结:
1)android系统是单线程系统,为了实现多线程的效果,采用了message queue。
2)为实现多线程,可采用runOnUiThread,post,handle,AsyncTask技术实现。
 

分享到:

中博教育南京中博南校区在线咨询
中博教育南京中博校区来校路线
中博教育南京中博校区了解课程
中博教育南京中博校区

作者: 中博教育中博培训学校 原载: 中博教育南京中博校区 www.xueshihou.com
版权所有,转载时必须以链接形式注明作者和原始出处及本声明

------分隔线----------------------------

学校简介 | 软件课程 | 测试课程 | 中博教育JAVA/.NET | 安卓课程 | 网络营销 | 就业明星 | 就业保障 | 招生问答 | 在线报名