Android多线程(一) Looper和Handler

本文介绍了一种基于Looper和Handler的并发模型——PipelineThread,并详细解释了其在Android UI设计中的应用,尤其关注于文件下载场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

    Looper和Handler在Android的UI程序设计中用得很多。到底它们能做什么呢?其实,用它们能构成一个常用的并发模型,这里称之为PipelineThread。我们对该模型的特征作以下描述。

  1. PipelineThread维持一系列的Tasks。
  2. 其他线程能在任何时候都可以向这PipelineThread发送Task。
  3. PipelineThread逐个地、按序地处理这些Tasks。
  4. Task有时也称为Message。

    

      举例比喻PipelineThread的一种工作场景:一个流水线作业的模型中,传送带的前端有一个工人Handler负责将其他线程的Task和Msg搬运上传送带(PipelineThread)。传送带另一端的工人Loope负责将作业一个一个地依次行处理(Run)。有时,也安排一个传话的人站在旁边溜达,当PipelineThread需要向其他线程发送消息时就告诉工人Listener。

二、PipelineThread模型的用途

      其实我们的UI主线程就是一个PipelineThread的典型应用。正因为它具备该模型的多任务顺序处理的特点,我们才不用去担心改变按钮文字和用户点击按钮这两个事件同时发生该怎么办。除此之外,该模型还常常用在以下情况。

  1. 向远端服务器发送请求处理。
  2. 上传照片到Http服务器。
  3. 对图片进行Resize处理。
  4. 从网络下载文件。

    接下来我们就举例说明PipelineThread如何应用在文件下载中。

三、文件下载

【效果图】
 

【代码要点】

    我们将DownloadThread设计成PipelineThread。DownloadThread继承自Thread,Looper将普通的Thread变成PipelineThread。先看看在run()函数里面的实现。
DownloadThread.java片段:
  

    其他线程通过他线程通过handler.post将处理(Task)发送ipelineThread线程的的消息队列中。DownloadThread类中公开了这样两个方法。
DownloadThread.java片段:


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值