当前位置: 首页 > news >正文

Android Service 从 1.0 到 16 的演进史

一、Android 1.0(API 1) - 服务的诞生

核心特性

基础服务组件:作为四大组件之一,Service 用于在后台执行长时间运行的任务,不提供 UI 界面。

启动方式:通过 startService() 启动独立运行的服务,或通过 bindService() 与其他组件绑定通信。

生命周期:包含 onCreate()onStart()onDestroy() 等基础回调方法。

代码示例

public class MyService extends Service {    @Override    public void onCreate() {        super.onCreate();        // 初始化操作    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        // 处理启动请求        return START\_STICKY;    }    @Override    public IBinder onBind(Intent intent) {        return null; // 不支持绑定    }}

二、Android 2.0(API 5) - 异步任务简化

核心特性

IntentService:引入抽象类 IntentService,自动处理线程管理和任务队列,开发者只需重写 onHandleIntent() 方法。

线程安全:内部使用 HandlerThread 处理异步任务,避免主线程阻塞。

代码示例

public class MyIntentService extends IntentService {    public MyIntentService() {        super("MyIntentService");    }    @Override    protected void onHandleIntent(Intent intent) {        // 执行耗时任务    }}

三、Android 3.0(API 11) - 多任务优化

核心特性

平板适配:针对 Honeycomb 系统优化多任务处理,Service 支持更灵活的后台任务调度。

进程管理:引入更严格的内存管理策略,优先保障前台应用资源。

四、Android 4.0(API 14) - 后台服务管理

核心特性

绑定服务增强:支持双向通信,客户端通过 ServiceConnection 获取服务实例。

后台限制:引入更严格的后台执行策略,限制后台服务对系统资源的占用。

代码示例

// 客户端绑定服务Intent intent = new Intent(this, MyService.class);bindService(intent, new ServiceConnection() {    @Override    public void onServiceConnected(ComponentName name, IBinder service) {        MyService.LocalBinder binder = (MyService.LocalBinder) service;        MyService myService = binder.getService();        // 调用服务方法    }}, BIND\_AUTO\_CREATE);

五、Android 5.0(API 21) - 任务调度革新

核心特性

JobScheduler:引入任务调度 API,支持在指定条件(如充电、网络连接)下执行后台任务。

Material Design:优化服务通知样式,增强用户体验。

代码示例

JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB\_SCHEDULER\_SERVICE);JobInfo jobInfo = new JobInfo.Builder(JOB\_ID, new ComponentName(this, MyJobService.class))        .setRequiredNetworkType(JobInfo.NETWORK\_TYPE\_ANY)        .setRequiresCharging(true)        .build();scheduler.schedule(jobInfo);

六、Android 6.0(API 23) - 省电模式

核心特性

Doze 模式:设备静置时限制后台活动,Service 仅在特定时段唤醒执行任务。

App Standby:根据应用使用频率限制后台活动,提升电池续航。

适配建议

使用 JobScheduler 替代 AlarmManager 执行定时任务。

避免在 Doze 模式下频繁唤醒服务。

七、Android 7.0(API 24) - 后台限制强化

核心特性

隐式广播限制:应用无法通过清单注册隐式广播(如网络变化),需动态注册。

后台进程限制:开发者选项中新增 “后台进程限制”,控制应用后台运行数量。

代码示例

// 动态注册广播接收器IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY\_ACTION);registerReceiver(networkReceiver, filter);

八、Android 8.0(API 26) - 后台服务冻结

核心特性

后台服务限制:应用进入后台后,后台服务会在短时间内被冻结,需使用前台服务或 JobScheduler

StartForegroundService:启动前台服务时需在 5 秒内调用 startForeground(),否则触发 ANR。

代码示例

// 启动前台服务startForegroundService(new Intent(this, MyForegroundService.class));// 服务中创建通知NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL\_ID)        .setContentTitle("Foreground Service")        .setSmallIcon(R.drawable.ic\_notification);startForeground(NOTIFICATION\_ID, builder.build());

九、Android 9.0(API 28) - 位置权限收紧

核心特性

位置权限限制:后台访问位置需申请 ACCESS_BACKGROUND_LOCATION 权限,且需开启 GPS。

后台位置访问:应用需在前台时获取位置信息,后台访问需明确用户授权。

适配建议

使用 FusedLocationProviderClient 替代传统位置 API。

避免在后台频繁获取位置数据。

十、Android 10(API 29) - 存储沙盒化

核心特性

Scoped Storage:应用默认只能访问自身目录,访问外部存储需通过 MediaStoreStorage Access Framework

后台服务限制:进一步收紧后台服务权限,推荐使用 WorkManager

代码示例

// 通过 MediaStore 查询图片ContentResolver resolver = getContentResolver();Uri collection = MediaStore.Images.Media.EXTERNAL\_CONTENT\_URI;Cursor cursor = resolver.query(collection, null, null, null, null);

十一、Android 11(API 30) - 权限精细化

核心特性

一次性权限:用户可授予应用单次位置、相机或麦克风访问权限。

后台位置权限:申请后台位置需先获得前台位置权限,且用户需在设置中手动授权。

适配建议

使用 ActivityResultContracts 处理权限请求。

避免在后台长时间占用敏感权限。

十二、Android 12(API 31) - 隐私增强

核心特性

近似位置:用户可选择授予应用精确或近似位置权限。

麦克风 / 摄像头提示:应用使用麦克风或摄像头时,状态栏显示提示图标。

代码示例

// 申请位置权限ActivityResultLauncher\<String\[]> locationRequest = registerForActivityResult(&#x20;   new ActivityResultContracts.RequestMultiplePermissions(),&#x20;   result -> {&#x20;       if (result.getOrDefault(Manifest.permission.ACCESS\_FINE\_LOCATION, false)) {&#x20;           // 有权限&#x20;       }&#x20;   });locationRequest.launch(new String\[]{Manifest.permission.ACCESS\_FINE\_LOCATION});

十三、Android 13(API 33) - 后台服务管理

核心特性

沙盒限制:应用无法直接访问其他应用私有目录,需通过 ContentProvider 共享数据。

前台服务任务管理器:系统提供前台服务列表,用户可直接管理。

适配建议

使用 WorkManager 替代后台服务执行任务。

避免在后台执行高耗电操作。

十四、Android 14(API 34) - 前台服务类型

核心特性

前台服务类型:需在清单中声明服务类型(如 dataSynclocation),否则无法启动。

用户启动的数据传输:新增 WorkManager API,支持用户发起的长时间数据传输。

代码示例

\<!-- AndroidManifest.xml -->\<service&#x20;   android:name=".MyDataSyncService"&#x20;   android:foregroundServiceType="dataSync" />

十五、Android 15(API 35) - 服务超时机制

核心特性

数据同步超时dataSync 前台服务在 24 小时内最多运行 6 小时,超时触发 onTimeout() 回调。

媒体处理服务:新增 mediaProcessing 服务类型,支持媒体文件转码等操作。

适配建议

实现 onTimeout() 方法,及时停止服务。

避免长时间占用 dataSync 服务。

十六、Android 16(API 36) - 服务管理优化

核心特性

后台服务优先级:系统根据应用使用频率动态调整后台服务优先级,优先保障前台应用。

服务监控:新增开发者工具,支持实时监控后台服务资源占用。

适配建议

使用 WorkManager 调度任务,避免直接启动后台服务。

优化服务代码,减少资源消耗。

总结:从 Android 1.0 到 Android 16 的 Service 演进

版本核心特性推荐替代方案
1.0基础服务组件
2.0IntentService 简化异步任务
3.0多任务优化
4.0绑定服务增强
5.0JobScheduler 任务调度替代 AlarmManager
6.0Doze 模式省电使用 JobScheduler
7.0隐式广播限制动态注册广播接收器
8.0后台服务冻结使用前台服务或 JobScheduler
9.0位置权限收紧FusedLocationProviderClient
10.0Scoped Storage 沙盒化MediaStore 或 Storage Access
11.0一次性权限ActivityResultContracts
12.0近似位置
13.0沙盒限制ContentProvider
14.0前台服务类型
15.0服务超时机制
16.0服务管理优化WorkManager

最佳实践

优先使用 WorkManager:替代传统后台服务,自动处理任务调度和资源管理。

避免后台执行:尽可能将任务移至前台或使用 JobScheduler。

权限管理:动态申请敏感权限,尊重用户隐私选择。

优化代码:减少服务中的耗时操作,使用线程池或协程。

通过以上版本特性的分析,开发者可以更好地理解 Android Service 的演进历程,并根据不同版本的特性选择最优的实现方案。

相关文章:

  • 小游戏(2)扫雷游戏
  • 小芯片大战略:Chiplet技术如何重构全球半导体竞争格局?
  • Laravel 12 基于 EMQX 实现 MQTT 消息发送与接收
  • Linux云计算训练营笔记day02(Linux、计算机网络、进制)
  • 信息论05:信息论中的条件熵——从不确定性量化到机器学习实战
  • java每日精进 5.06【框架之功能权限】
  • java安全入门
  • AI技术下研发体系重构
  • 登高架设作业“十不登高”原则
  • SSCLMD项目详细分析
  • colcon: error: unrecognized arguments: --packages-select报错
  • vs code管理员权限启动问题
  • 最新版Google浏览器加载ActiveX控件之VLC五一节特别版
  • 【Linux系统】读写锁
  • QT Sqlite数据库-教程03 插入数据-下
  • 如何修改 JAR 包中的源码
  • 设备管理系统的功能架构与核心价值
  • MATLAB程序演示与编程思路,相对导航,四个小车的形式,使用集中式扩展卡尔曼滤波(fullyCN-EKF)
  • 决 策 树
  • Marin说PCB之1000-BASE-T1的PCB设计总结--04
  • 俄乌互相空袭、莫斯科机场关闭,外交部:当务之急是避免局势紧张升级
  • 外交部介绍中国赞比亚共同举办人工智能能力建设主题活动情况
  • 陕南多地供水形势严峻:有的已呼吁启用自备水井
  • 何立峰将访问瑞士、法国并举行中美经贸高层会谈、第十次中法高级别经济财金对话
  • 上海虹桥高铁站拦门事件反转,谁在带偏网友?
  • 中国海警局新闻发言人就日民用飞机侵闯我钓鱼岛领空发表谈话