Skip to content

Android多线程综述

更新日期: 2021-9-12
  • 2021-9-12 更新图
  • 2021-9-11 更新线程池,WorkManager介绍
  • 2021-9-6 创建文档

介绍Android应用开发中的多线程。涉及ThreadHandler、线程池、WorkManager等。

多线程介绍

操作系统可以在同一时刻运行多个程序。例如一边播放音乐,一边下载文件和浏览网页。操作系统将cpu的时间片分配给每一个进程,给人一种并行处理的感觉。 一个多线程程序可以同时执行多个任务。通常,每一个任务称为一个线程(thread),它是线程控制的简称。可以同时运行一个以上线程的程序成为多线程程序(multithreaded)。 实际应用中,多线程非常有用。例如应用一边处理用户的输入指令,一遍联网获取数据。

多线程介绍

Handler

Android开发中我们可以直接使用Thread,也可以使用Handler

Handler在Android开发中是一个比较常用的工具。一个Handler允许发送和处理Message(任务),通过关联线程的MessageQueue执行Runnable对象。有些定时任务也可以用它来执行。

每个Handler实例都和一个单独的线程及其消息队列绑定。可以将一个任务切换到Handler所在的线程中去执行。一个用法就是子线程通过Handler更新UI。

Handler使用

线程池

有大量异步任务的时候,可以考虑使用线程池。需要执行大量异步任务的时候,减轻每个异步任务的调用开销,提高性能。另外它还能够限制和管理子线程。

ThreadPoolExecutor提供了很多参数,方便开发者调控。线程池的设计者建议开发者使用以下几个工厂方法,Android中主要有5种

  • newCachedThreadPool() 不限制数量的线程池,能自动回收线程
  • newFixedThreadPool(int nThreads) 固定数量的线程池
  • newSingleThreadExecutor() 单一的子线程
  • newScheduledThreadPool(int corePoolSize) 能执行延时任务或者周期性任务
  • newWorkStealingPool() 工作窃取线程池

线程池使用

WorkManager

WorkManager提供了任务调度功能,我们可以对工作进行标记或命名。WorkManager可以在子线程中执行任务,但用法不仅限于多线程。更在于工作调度。

WorkManager使用入门 工作约束,延迟与查询工作

作者: RustFisher
联系: rf.cs@foxmail.com
博客: rustfisher.com | RustFisher cnblog
示例: AndroidTutorial Gitee, Tutorial Github
链接: https://www.an.rustfisher.com/android/thread/android-thread-survey/
一家之言,仅当抛砖引玉。如有错漏,还请指出。