Android 多线程编程的总结

前言

我们为什么需要多线程机制?什么时候需要到多线程?

熟悉 Java 的你,对多线程编程一定不会陌生吧。当我们需要执行一些耗时操作,比如说发起一条网络请求时,考虑到网速等其他原因,服务器未必会立刻响应我们的请求,如果

不将这类操作放在子线程里去运行,就会导致主线程被阻塞住,从而影响用户对软件的正常 使用。那么就让我们从线程的基本用法开始学习吧

1.线程的基本用法

   1.1   继承thread     实现Runnable接口

  

2.在子线程中更新UI

Android中更新UI元素,必须在主线程中进行,否则就会出现异常



AsyncTask

AsyncTask是一个抽象类,使用的时候必须继承它,并且我们要为AsyncTask类指定3个泛型参数,
第一个是执行AsyncTask传入的参数,可以在后台任务中使用。
第二个参数是如果需要在界面上显示当前的进度,以第二个参数的类型作为进度单位。
第三个参数是使用这里指定的泛型作为返回值类型。



onPreExecute()方法是在后台任务开始执行之前调用。可以用于进行一些界面初始化操作。onInBackground()方法中的所有代码都是在子线程中执行的。任务完成后通过return返回执行结构。但不可以进行UI操作,要进行UI操作可以调用publishProgress()方法。onProgressUpdate()方法,调用了publishProgress()方法后会调用该方法,在onProgressUpdate()方法里可以进行UI操作。onPostExecute()方法是在后台任务执行完,利用返回数据判断进行一些UI操作的。如果要启动这个任务,需要以下代码
使用IntentService,好处是onHandleIntent已经是在子线程中运行了。服务在运行结束后会自动停止。



3.解析异步消息处理机制

Android 中的异步消息处理主要由四个部分组成,Message、Handler、MessageQueue 和 Looper。其中 Message 和 Handler 在上一小节中我们已经接触过了,而 MessageQueue 和 Looper 对于你来说还是全新的概念,下面我就对这四个部分进行一下简要的介绍。


1.    Message

Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。上一小节中我们使用到了 Message 的 what 字段,除此之外还可以使 用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 对象。 了解了 Message、Handler、MessageQueue 以及 Looper 的基本概念后,我们再来对异步



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值