service 后台服务 为什么它是耗电和偷跑流量的元凶
service 就是应用在后台偷偷干活的那个
如果说 activity 是"界面",那 service 就是"后台苦力"。它不显示任何界面,一直在后台运行,做下载、播放、保活、数据上报、心跳、广告拉取这些事。发热、耗电、流量偷跑,十有八九是后台 service 在值班。
为什么 service 是耗电元凶
应用开发者喜欢把各种东西塞进 service:
- 广告 SDK 的 service 会定时拉取广告物料,后台一启动就跑网络请求
- 推送通道(极光、个推、厂商推送)的 service 常驻后台,维持长连接收消息
- 数据上报 service 定时把使用数据、崩溃日志、设备标识符打包上报
- 保活 service 被设计成"前台服务"(带通知栏常驻图标),确保应用不会被系统杀掉
这些 service 加在一起,就是"应用看起来没在跑,但后台一直在忙"的原因。
关掉 service 会怎样
关掉一个 service,对应的后台任务就停了。效果取决于 service 做什么:
- 广告拉取 service 关了 → 应用打开时不再有广告物料可用 → 没有弹窗
- 推送心跳 service 关了 → 收不到推送消息(这个要权衡:你是真的不想收推送,还是只想减少后台流量?)
- 数据上报 service 关了 → 应用不再上报使用数据(隐私收益)
怎么辨认哪个 service 该关
在 Blocker 里进应用详情,切到 service tab。看名字:
- 带
Ad、TTAd、Pangle、OpenAd、GDT、PangleAd的 → 广告 SDK,优先关 - 带
Push、JPush、IGet、HuaweiPush、XiaomiPush的 → 推送通道,按需关 - 带
Track、Report、Analytics、Umeng、Bugly的 → 数据上报,建议关 - 带
Core、Main、Engine、Download的 → 核心功能,谨慎关
不确定的就先关一个试试,打开应用跑一圈看看有没有功能缺失,有问题再点开。
Service 的两种类型
Android 里 service 还分:
- 前台 service:带通知栏图标,优先级高,系统不容易杀
- 普通 service:后台运行,内存紧张时可能被系统回收
即使是前台 service,关了它的开关也会阻止它启动。Bloker 对两种类型一视同仁。