设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间08 现在时间08 缓存数据 生活如海,宽容作舟,泛舟于海,方知海之宽阔;生活如歌,宽容是曲,和曲而歌,方知生活甜美。早安

生活如海,宽容作舟,泛舟于海,方知海之宽阔;生活如歌,宽容是曲,和曲而歌,方知生活甜美。早安

查看: 861|回复: 0

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

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:219
  • 打卡月天数:0
  • 打卡总奖励:3305
  • 最近打卡:2025-04-04 00:23:53
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
422
主题
385
精华
0
金钱
4532
积分
849
注册时间
2023-1-22
最后登录
2025-5-31

发表于 2025-5-31 06:48:18 | 显示全部楼层 |阅读模式
一句话总结:

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

一、Service 的两种类型:


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


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

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

  • 代码示例
  1. val notification = buildNotification() // 创建通知
  2. startForeground(1, notification) // 变成前台服务
复制代码
2. 后台服务(偷偷干活,但容易被抓)


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

    • 临时任务(如数据同步)。
    • 轻量任务(如定时提醒)。

  • 注意:高版本 Android 中,后台服务可能无法长期存活,建议改用
    1. WorkManager
    复制代码
    1. JobScheduler
    复制代码


二、Service 的两种启动方式:


1. 独立干活(startService)


  • 特点

    • 通过
      1. startService()
      复制代码
      启动,Service 会一直运行,直到主动调用
      1. stopSelf()
      复制代码
      或其他组件调用
      1. stopService()
      复制代码

    • 生命周期
      1. onCreate()
      复制代码
      1. onStartCommand()
      复制代码
      → (运行中) →
      1. onDestroy()
      复制代码


  • 适用场景

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

  • 代码示例
  1. // 启动服务
  2. val intent = Intent(this, MyService::class.java)
  3. startService(intent)

  4. // 停止服务
  5. stopService(intent)
复制代码
2. 和人合作干(bindService)


  • 特点

    • 通过
      1. bindService()
      复制代码
      启动,Service 和组件(如 Activity)绑定,绑定解除后 Service 可能被销毁
    • 生命周期
      1. onCreate()
      复制代码
      1. onBind()
      复制代码
      → (运行中) →
      1. onUnbind()
      复制代码
      1. onDestroy()
      复制代码

    • 可以通过
      1. IBinder
      复制代码
      接口实现组件和 Service 的双向通信(比如控制音乐播放进度)。

  • 适用场景

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

  • 代码示例
  1. // 绑定服务
  2. val connection = object : ServiceConnection {
  3.     override fun onServiceConnected(name: ComponentName?, binder: IBinder?) {
  4.         // 获取 Service 的接口,进行交互
  5.     }
  6.     override fun onServiceDisconnected(name: ComponentName?) {}
  7. }
  8. bindService(intent, connection, Context.BIND_AUTO_CREATE)

  9. // 解绑服务
  10. unbindService(connection)
复制代码
三、混合模式(start + bind)


  • 特点

      1. startService()
      复制代码
      让 Service 长期运行,再
      1. bindService()
      复制代码
      进行交互。
    • 适用场景:音乐播放器(长期播放 + 界面控制进度)。

  • 销毁条件:必须同时调用
    1. stopService()
    复制代码
    1. unbindService()
    复制代码
    才会销毁。

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


  • 特点

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


  • 代码示例
  1. class MyIntentService : IntentService("MyIntentService") {
  2.     override fun onHandleIntent(intent: Intent?) {
  3.         // 在子线程执行耗时任务
  4.     }
  5. }
复制代码
五、如何选择启动方式?

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


  • 前台服务:要亮通知,适合用户感知的任务。
  • 后台服务:尽量少用,高版本 Android 限制多。
  • 启动方式

    • 独立干:用
      1. startService()
      复制代码
      ,记得关。
    • 合作干:用
      1. bindService()
      复制代码
      ,绑定完记得解。

  • 口诀

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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表