Android基础知识(八):Android多线程编程

Android基础知识(八):Android多线程编程

Android多线程编程中,当需要执行一些耗时操作,比如发起一条网络请求时,考虑到网速等其他原因,服务器未必会即使响应,如果不将这类操作放在子线程中运行,就会导致主线程被阻塞,从而影响用户对软件的正常使用。

一、在子线程中更新UI
Android的UI线程是不安全的,如果想要更新应用程序的UI元素,则必须在主线程中进行,否则就会出现异常。
Android不允许在子线程中进行UI操作,但是有时候需要在子线程里执行一些耗时任务,然后根据任务的执行结果来更新相应的UI控件,对于这种情况,Android提供了一套异步消息处理机制
在这里插入图片描述

二、解析异步消息处理机制——Handler机制
Android中的异步消息处理主要由4部分组成:Message、Handler、MessageQueue和Looper。

  1. Message
    Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。Message的arg1和arg2字段可以携带一些整型数据,使用obj字段可以携带一个object对象。
  2. Handler
    Handler即为处理者,主要用于发送和处理消息的。发送消息一般是使用Handler的sendMessage()方法,而发出的消息经过一系列辗转处理之后,最终会传递到Handler的handleMessage()方法中。
  3. MessageQueue
    MessageQueue是消息队列的意思,其主要用于存放所有通过Handler发送的消息。这部分消息会一直存在消息队列中,等待被处理。每个线程只会有一个MessageQueue对象
  4. Looper
    Looper是每个线程中的MessageQueue的管家,调用Looper的loop()方法后,就会进入到一个无限循环中,然后每当发现MessageQueue中存在一条消息,就会将它去除,并传递到Handler的handleMessage()方法中。每个线程只会有一个Looper对象
    在这里插入图片描述
    在这里插入图片描述
    更多关于Handler机制的原理,参照笔记:Android基础知识(九):Handler机制的原理分析

三、AsyncTask
Android提供的另一个异步操作工具为AsyncTask,AsyncTask背后的原理也是基于异步消息处理(Handler)机制的,只是Android做了很好的封装。(关于更多的AsyncTask知识查看笔记:Android基础知识(十一):AsyncTask原理与使用简介)。

参考资料:《第一行代码 Android 第2版》

猜你喜欢

转载自blog.csdn.net/weixin_38196407/article/details/89473656