Android里面的Service种类以及启动方式

 更新时间:2025年02月14日 11:28:34   作者:双鱼大猫  
Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和bindService,选择启动方式应根据任务类型和场景进行,需要的朋友可以参考下

一句话总结:

Service 是 Android 的“后台打工人”,分两种类型(前台和后台),两种启动方式(自己干、和人合作干),不同场景用不同姿势。

一、Service 的两种类型:

1. 前台服务(必须亮身份牌)

  • 特点:必须显示一个常驻通知(像外卖小哥穿着工服),告诉用户“我正在后台干活”,避免被系统干掉。

  • 适用场景

    • 音乐播放(显示播放通知)。
    • 文件下载(显示进度条)。
    • 定位跟踪(如导航)。
  • 代码示例

val notification = buildNotification() // 创建通知
startForeground(1, notification) // 变成前台服务

2. 后台服务(偷偷干活,但容易被抓)

  • 特点:没有通知,默默干活,但 Android 8.0 之后限制严格(长时间后台运行会被系统限制)。

  • 适用场景

    • 临时任务(如数据同步)。
    • 轻量任务(如定时提醒)。
  • 注意:高版本 Android 中,后台服务可能无法长期存活,建议改用 WorkManager 或 JobScheduler

二、Service 的两种启动方式:

1. 独立干活(startService)

  • 特点

    • 通过 startService() 启动,Service 会一直运行,直到主动调用 stopSelf() 或其他组件调用 stopService()
    • 生命周期onCreate() → onStartCommand() → (运行中) → onDestroy()
  • 适用场景

    • 需要长期运行的任务(如播放音乐)。
    • 不依赖其他组件的独立任务。
  • 代码示例

// 启动服务
val intent = Intent(this, MyService::class.java)
startService(intent)

// 停止服务
stopService(intent)

2. 和人合作干(bindService)

  • 特点

    • 通过 bindService() 启动,Service 和组件(如 Activity)绑定,绑定解除后 Service 可能被销毁
    • 生命周期onCreate() → onBind() → (运行中) → onUnbind() → onDestroy()
    • 可以通过 IBinder 接口实现组件和 Service 的双向通信(比如控制音乐播放进度)。
  • 适用场景

    • 需要与界面交互的任务(如控制下载进度)。
    • 多个组件共享同一个 Service。
  • 代码示例

// 绑定服务
val connection = object : ServiceConnection {
    override fun onServiceConnected(name: ComponentName?, binder: IBinder?) {
        // 获取 Service 的接口,进行交互
    }
    override fun onServiceDisconnected(name: ComponentName?) {}
}
bindService(intent, connection, Context.BIND_AUTO_CREATE)

// 解绑服务
unbindService(connection)

三、混合模式(start + bind)

  • 特点

    • 先 startService() 让 Service 长期运行,再 bindService() 进行交互。
    • 适用场景:音乐播放器(长期播放 + 界面控制进度)。
  • 销毁条件:必须同时调用 stopService() 和 unbindService() 才会销毁。

四、IntentService(已过时,但要知道)

  • 特点

    • 自带工作线程,任务按顺序执行,干完活自动关闭。
    • Android 8.0 后受限,推荐改用 WorkManager 或 JobIntentService
  • 代码示例

class MyIntentService : IntentService("MyIntentService") {
    override fun onHandleIntent(intent: Intent?) {
        // 在子线程执行耗时任务
    }
}

五、如何选择启动方式?

场景启动方式类型
长期任务(如音乐播放)startService()前台服务
临时交互(如下载控制)bindService()绑定服务
轻量后台任务(如数据同步)WorkManager后台服务替代

总结

  • 前台服务:要亮通知,适合用户感知的任务。

  • 后台服务:尽量少用,高版本 Android 限制多。

  • 启动方式

    • 独立干:用 startService(),记得关。
    • 合作干:用 bindService(),绑定完记得解。
  • 口诀

    • “长期亮牌用前台,临时合作用绑定,高版本别硬杠,WorkManager 更稳当”

以上就是Android里面的Service种类以及启动方式的详细内容,更多关于Android Service种类及启动的资料请关注脚本之家其它相关文章!

相关文章

  • 解决Android Studio4.1没有Gsonfomat插件,Plugin “GsonFormat” is incompatible的问题

    解决Android Studio4.1没有Gsonfomat插件,Plugin “GsonFormat” is inco

    这篇文章主要介绍了解决Android Studio4.1没有Gsonfomat插件,Plugin “GsonFormat” is incompatible (supported only in IntelliJ IDEA)的问题 ,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-12-12
  • Android Handler消息机制分析

    Android Handler消息机制分析

    这篇文章主要介绍了Android Handler消息机制分析,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Android编程实现泡泡聊天界面实例详解(附源码)

    Android编程实现泡泡聊天界面实例详解(附源码)

    这篇文章主要介绍了Android编程实现泡泡聊天界面,结合实例形式较为详细的分析了Android泡泡聊天界面的窗体定义与功能实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Android studio2.3.3升级到3.1.2坑(小记)

    Android studio2.3.3升级到3.1.2坑(小记)

    这篇文章主要介绍了Android studio2.3.3升级3.1.2坑(小记),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Android记事本项目开发

    Android记事本项目开发

    这篇文章主要为大家详细介绍了Android记事本项目开发的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android 5.0+ 屏幕录制实现的示例代码

    Android 5.0+ 屏幕录制实现的示例代码

    这篇文章主要介绍了Android 5.0+ 屏幕录制实现的示例代码,从 5.0 开始,系统提供给了 app 录制屏幕的一系列方法,不需要 root 权限,只需要用户授权即可录屏,相对来说较为简单,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android 出现的警告(Service Intent must be explicit)解决办法详解

    Android 出现的警告(Service Intent must be explicit)解决办法详解

    这篇文章主要介绍了Android 出现的警告(Service Intent must be explicit)解决办法详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • Android Usb设备的监听(Dev)外设端口的判定以及耳机的插拔

    Android Usb设备的监听(Dev)外设端口的判定以及耳机的插拔

    今天小编就为大家分享一篇关于Android Usb设备的监听(Dev)外设端口的判定以及耳机的插拔,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Android WebView中图片浏览及缩放效果

    Android WebView中图片浏览及缩放效果

    这篇文章主要为大家详细介绍了Android WebView中图片浏览及缩放效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android利用MPAndroidChart绘制曲线图表的基础教程

    Android利用MPAndroidChart绘制曲线图表的基础教程

    最近在项目中要用到曲线图,于是在网上找了很多很多,有AChartengine,MPAndroidChart,helloChart等等,我还用过基于html5的jsChart来做过,不过最终还是选择了MPAndroidChart来做本文介绍了Android利用MPAndroidChart绘制曲线图表的基础教程,需要的朋友可以参考下。
    2018-03-03

最新评论