当前位置: 首页 > 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 的演进历程,并根据不同版本的特性选择最优的实现方案。

http://www.xdnf.cn/news/307207.html

相关文章:

  • SQL报错注入成功特征
  • 人工智能100问☞第15问:人工智能的常见分类方式有哪些?
  • Unity Editor 扩展:查找缺失的 Image Sprite
  • 从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 7 |TinyML 定位:深度模型在 MCU 上的部署
  • HarmonyOS开发:粒子动画使用详解
  • idea更换jdk版本操作
  • 分布式、高并发-Day03
  • 开源BI选型及DataEase搭建
  • 香港维尔利健康科技集团与亚洲医学研究院达成战略合作,联合打造智慧医疗应用技术实验室
  • ES6/ES11知识点 续五
  • 单调栈算法精解(Java实现):从原理到高频面试题
  • [250504] Moonshot AI 发布 Kimi-Audio:开源通用音频大模型,驱动多模态 AI 新浪潮
  • Android数据库全栈开发实战:Room+SQLCipher+Hilt企业级应用构建
  • 【计算机网络】TCP/IP四层模型是什么?与OSI七层模型哪些区别?
  • 提示词的 嵌入空间优化
  • ECMAScript 6(ES6):JavaScript 现代化的革命性升级
  • 使用蚁群算法求解VRPTW问题
  • 信息系统项目管理工程师备考计算类真题讲解十三
  • 光纤失效模式及其影响
  • n8n 与智能体构建:开发自动化 AI 作业的基础平台
  • 单例模式的实现方法
  • Android SDK 国内镜像及配置方法(2025最新,包好使!)
  • MySQL同步ES的6种方案!
  • 74LS138译码器的编址技术
  • 存储系列知识
  • YOLO8之学习指南
  • 行业黑化.新平面
  • 系统学习算法:动态规划(斐波那契+路径问题)
  • 第2章——springboot核心机制
  • Spring Boot Validation实战详解:从入门到自定义规则