美文网首页
2018-07-23 Android 多线程编程

2018-07-23 Android 多线程编程

作者: 灼灼其华_b157 | 来源:发表于2018-07-24 10:55 被阅读0次

    前面我写过一篇文章简要介绍了一下Java多线程,今天来讲一下Android多线程,其实Android多线程和Java多线程基本是一样的,基本都使用相同的语法,例如

    1.通过类继承Thread类实现多线程,重写run()方法

    启动该线程的办法也很简单,只要new MyThread().start(); new 出类的实例,调用start()方法

    2.通过类实现Runnable接口

    这样的话启动线程的办法就会改变

    MyThread   myThread   =  new Mythread();

    new Thread(myThread).start();

    Thread构造方法接收一个Runnable参数,而我们的MyThread对象传入Thread,再调用start()方法

    3.如果不想再定义一个专门的类去实现Runnable接口,也可以使用匿名类的方式,这种写法更为常见,前面我们学习Http的两种方式中,在开启线程的时候使用的就是匿名类的办法

    二.在主线程更新UI

    Android的UI也是线程不安全的,如果想要更新应用程序的UI,必须在主线程进行,否则就会出现异常

    Android异步消息处理机制

    异步处理机制有四个重要的部分组成

    1.Message

    Message是在线程中传递的信息,他可以携带少量的数据,用于在不同线程中交换数据

    2.Handler

    顾名思义,Handler是处理者的意思,他主要用于发送和处理消息,发送消息是使用Handler的

    sendMessage()方法,发出的消息在经过一系列的辗转之后,最终传递到Handler的handleMessage()方法之中

    3.MessageQueue

    MessageQueue是消息队列的意思,每个经过Handler发送的消息都会存放在MessageQueue中等待被处理

    每个线程中只会有一个MessageQueue对象

    4.Looper

    Looper是MessageQueue的消息管家,每当MessageQueue中有带处理的消息时,Looper都会调用loop()方法(无限循环),将MessageQueue中的消息传入handleMessage()方法之中,且每个线程中也只有一个Looper对象

    过程:首先需要通过Handler创建一个对象,并重写handleMessage()方法,在子线程要进行UI操作时,创建Message对象,通过Handler将这条消息发送出去(Message的功能就是在线程中传递信息),发送出去的消息自然就存放在MessageQueue消息队列里面,等待Looper的loop()方法来去除消息传给handleMessage()方法,且Handler是在主线程创建的,则handleMessage()方法也是在主线程完成的,这样就可以安心的进行UI操作了

     异步消息处理流程图

    使用AsyncTask可以直接更方便的对线程进行操作

    相关文章

      网友评论

          本文标题:2018-07-23 Android 多线程编程

          本文链接:https://www.haomeiwen.com/subject/zjajmftx.html