今天我们来探讨一下 Android 四大组件的重要组成部分:Service。
Service 有多重要?
之前在「兰柳学」的文章中看到这样一个场景,挺有意思的,先给大家分享一下,让我们一起来看看对 Service 的无知到底会有多麻烦。
场景:如果一个应用要从网络上下载一个文件,并在 Activity 上展示进度条,这个 Activity 要求是可以转屏的。那么在转屏时 Actvitiy 会重启,如何保证下载的进度条能正确展示进度呢?
不会 Service 的人,一般会想出来这样的方案。
-
- 在转屏前将进度缓存,转屏后再读出来。
-
- 使用
android:configChanges
设置,让转屏时 Activity 不销毁和重建。
- 使用
针对第 1 种方案,其实细想漏洞百出。首先,转屏的过程中,我们知道 Activity 的重建算是比较耗时的,可能会有几百毫秒甚至更久,这时候下载线程仍然在工作,进度肯定和保存时的进度不一致了,如何处理这个问题呢?
第 2 个方案,大家可以自己展开思考,实际的项目中可能会需要额外做一些事情来处理 ContentView 的横竖布局的问题。
如果采用 Service,你有什么好主意呢?不妨在评论区给出。
一定听过 Service 吧,它有几种启动方式?
Service 是一个专门在后台执行长时间操作的类,它并不与用户产生 UI 交互。它提供了两种启动方式。
- started
其它组件调用startService()
启动一个 Service。一旦启动,Service 将一直运行在