Android后台任务

简介

每个 Android 应用都有一个主线程,负责处理界面(包括测量和绘制视图)、协调用户互动以及接收生命周期事件。如果有太多工作在主线程中进行,则应用可能会挂起或运行速度变慢,从而导致用户体验不佳。任何长时间运行的计算和操作(例如解码位图、访问磁盘或执行网络请求)都应在单独的后台线程上完成。一般来说,任何所需时间超过几毫秒的任务都应该分派到后台线程。在用户与应用积极互动时,可能需要执行几项这样的任务。

后台处理的挑战

后台任务会使用设备的有限资源,例如 RAM 和电池电量。如果处理不当,可能会导致用户体验不佳。
为了最大限度地延长电池续航时间并强制推行良好的应用行为,Android 会在应用(或前台服务通知)对用户不可见时,限制后台工作。

  • Android 6.0(API 23)引入了低电耗模式和应用待机模式
  • Android 7.0(API 24)限制了隐式广播,并引入了随时随地使用低电耗模式。
  • Android 8.0(API 26)进一步限制了后台行为,例如在后台获取位置信息和释放缓存的唤醒锁定。
  • Android 9(API 28)引入了应用待机存储分区,通过它,系统会根据应用使用模式动态确定应用资源请求的优先级。

WorkManager

WorkManager 提供向后兼容的 API(兼容 API 级别 14 及更高级别),利用 JobScheduler API(API 级别 23 及更高级别)帮助优化更低级别设备上的电池续航时间、批量作业以及 AlarmManager 和 BroadcastReceiver 的组合。

AlarmManager

如果您需要在确切的时间运行某项作业,请使用 AlarmManager。

DownloadManager

如果您的应用执行长时间运行的 HTTP 下载,请考虑使用 DownloadManager。客户端可能会请求将 URI 下载到位于应用进程之外的特定目标文件中。内容下载管理器会在后台执行下载操作,它负责处理 HTTP 互动,在下载失败或连接发生更改以及系统重新启动后重新尝试下载。

线程处理

  • 基础类:Thread、Runnable
  • Android类:HandlerThread、AsyncTask 和 IntentService
  • 线程池:ThreadPoolExecutor
  • Handler

Service

Service 是一种可在后台执行长时间运行操作而不提供界面的应用组件。

猜你喜欢

转载自blog.csdn.net/u010019244/article/details/106171309