Android 开发四大组件之 Service

1.简介

  • 定义 Service,是 Android 四大组件之一, 属于 计算型组件
  • 做用 提供需在后台长期运行的服务。如:复杂计算、音乐播放、下载等。
  • 特色 无用户界面、在后台运行、生命周期长。

2. 生命周期

生命周期

  1. 经过 start 方式开启服务 onCreate() -- > onStartCommand() -- > onDestory() 注意:若是服务已经开启,不会重复回调 onCreate() 方法,若是再次调用context.startService() 方法,service 而是会调用 onStart() 或者onStartCommand() 方法。中止服务须要调用 context.stopService() 方法,服务中止的时候回调 onDestory 被销毁。 特色:一旦服务开启就跟调用者(开启者)没有任何关系了。开启者退出了,服务还在后台长期的运行,开启者不能调用服务里面的方法。多线程

  2. 采用 bind 的方式开启服务 onCreate() -- > onBind() --> onUnbind() -- > onDestory() 注意:绑定服务不会调用 onStart() 或者onStartCommand()方法 特色:bind 的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。绑定者能够调用服务里面的方法。学习

3. 类型

本地服务线程

调用者和 service 在同一个进程里,因此运行在主进程的 main 线程中。因此不能进行耗时操做,能够采用在 service 里面建立一个 Thread 来执行任务。service 影响的是进程的生命周期,讨论与 Thread 的区别没有意义。 任何 Activity 均可以控制同一 Service,而系统也只会建立一个对应 Service 的实例。 学习地址cdn

远程服务blog

调用者和 service 不在同一个进程中,service 在单独的进程中的 main 线程,是一种跨进程通讯方式。学习地址生命周期

4. IntentService

IntentService 是 Service 的子类,比普通的 Service 增长了额外的功能。先看Service自己存在两个问题:队列

  • Service 不会专门启动一条单独的进程,Service 与它所在应用位于同一个进程中;
  • Service也不是专门一条新线程,所以不该该在Service中直接处理耗时的任务;

特征 :进程

  • 会建立独立的 worker 线程来处理全部的Intent请求;
  • 会建立独立的 worker 线程来处理 onHandleIntent() 方法实现的代码,无需处理多线程问题;
  • 全部请求处理完成后,IntentService会自动中止,无需调用stopSelf()方法中止Service;
  • 为 Service 的 onBind() 提供默认实现,返回null;
  • 为Service 的 onStartCommand 提供默认实现,将请求 Intent 添加到队列中; 学习地址
相关文章
相关标签/搜索