开发者

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

开发者 https://www.devze.com 2025-03-27 13:44 出处:网络 作者: 双鱼大猫
目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干活,但容易被抓)二、Service 的两种启动方式:1. 独立干活(startService)2. 和人合作干(bindService)三、混合模式(s
目录
  • 一句话总结:
  • 一、Service 的两种类型:
    • 1. 前台服务(必须亮身份牌)
    • 2. 后台服务(偷偷干活,但容易被抓)
  • 二、Service 的两种启动方式:
    • 1. 独立干活(startService)
    • 2. 和人合作干(bindService)
  • 三、混合模式(start + bind)
    • 四、IntentService(已过时,但要知道)
      • 五、如何选择启动方式?
        • 总结

          一句话总结:

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

          一、Service 的两种类型:

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

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

          • 适用场景

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

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

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

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

          • 适用场景

            • 临时任务(如数据同步)。
            • 轻量任务(如定时提醒)。
          • 注意:高版本 Anandroiddroid 中,后台服务可能无php法长期存活,建议改用 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 fu编程客栈n onHandleInteQgpLYxLBnt(intent: Intent?) {
                  // 在子线程执行耗时任务
              }
          }
          

          五、如何选择启动方式?

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

          总结

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

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

          • 启动方式

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

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

          以上就是Android里面的Service种类以及启动方式的详细内容,更多关于Android Service种类及启动的资料请关注编程客栈(www.devze.com)其它相关文章!

          0

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          关注公众号