Androidying应用之多线程机制Handler

       说到多线程,这里先谈谈Android系统为何需要多线程。我们都知道,Android线程通常分两种,UI线程(Main Thread)和工作线程(Worker Thread)。Android规定,UI线程是不能做耗时操作的,否则会出现ANR错误,所以耗时操作都要放在work THread中进行。Android还有一个重要原则,不能在UI Thread之外的线程当中操纵我们的UI,所以一般更新UI操作都是用Main Thread和Worker Thread的交互来完成。

       多线程机制的核心为Handler,这里先解释下Andrid的Handler原理。(这也是面试最常见的问题)

根据Android SDK,线程间通讯涉及到这几个类:Handler,Loop,Message,MessageQueue  。

Handler在android里负责发送和处理消息,通过它可以实现其他线程与Main线程之间的消息通讯。

Looper负责管理线程的消息队列和消息循环。

Message是线程间通讯的消息载体。两个码头之间运输货物,Message充当集装箱的功能,里面可以存放任何你想要传递的消息。

MessageQueue是消息队列,先进先出,它的作用是保存有待线程处理的消息

简单点说,它们四者之间的关系是,在其他线程中调用Handler.sendMessage()方法(参数是Message对象),将需要UI线程处理的事件添加到UI线程的MessageQueue中,UI线程通过MainLooper从消息队列中取出Handler发过来的这个消息时,会回调Handler的handlerMessage()方法。


下面说说一个线程更新UI的简单例子,说明UI线程和工作线程是如何通讯的。


1  先写一个类继承Thread或者实现Runable接口   然后重写run方法


 class  MyThread extends Thread{
    
            @Override
            public void run() {
                // TODO Auto-generated method stub
                
                if (isTrue) {    //isTure只是一个标志位
                    Message message = new Message();
                    message.what = 0;
                    mHandler.sendMessage(message);
                }
            }
            
        }


2  new一个Handler对象 并重写HandlerMessage方法,接收子线程发送的message,并更新UI。


private Handler mHandler = new Handler(){

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            if (msg.what == 0) {
                tv1.setText("更新后tv1");
                tv2.setText("更新后tv2");
            }
        }
    } ;


3 启动线程

 在需要的地方调用start方法启动线程(一般都在点击事件中启动)

                myThread = new MyThread();
                myThread.start();



Handler这块还有很多问题  后续继续更新






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值