如何通过23个重难点突破,全面掌握Service知识点?
摘要:前言 学 有一段时间了,想必不少人也和我一样,平时经常东学西凑,感觉知识点有些凌乱难成体系。所以趁着这几天忙里偷闲,把学的东西归纳下,捋捋思路。 这篇文章主要针对 相关的知识点,进行详细的梳理,祝大家食用愉快! 文章目录 方便大家学习,我在
前言
学 Android 有一段时间了,想必不少人也和我一样,平时经常东学西凑,感觉知识点有些凌乱难成体系。所以趁着这几天忙里偷闲,把学的东西归纳下,捋捋思路。
这篇文章主要针对 Service 相关的知识点,进行详细的梳理,祝大家食用愉快!
文章目录
方便大家学习,我在 GitHub 建立了 仓库
仓库内容与博客同步更新。由于我在 稀土掘金 简书 CSDN 博客园 等站点,都有新内容发布。所以大家可以直接关注该仓库,以免错过精彩内容!
仓库地址:
超级干货!精心归纳 Android 、JVM 、算法等,各位帅气的老铁支持一下!给个 Star !
第一篇:Service 是什么
1.1 什么是 Service
Service (服务) 是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。
服务可由其他应用组件启动(如 Activity ),服务一旦被启动将在后台一直运行,即使启动服务的组件( Activity )已销毁也不受影响。
此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 ( IPC )。
1.2 Service 通常总是称之为 “后台服务”
其中 “后台” 一词是相对于前台而言的,具体是指:其本身的运行并不依赖于用户可视的 UI 界面
因此,从实际业务需求上来理解,Service 的适用场景应该具备以下条件:
并不依赖于用户可视的 UI 界面(当然,这一条其实也不是绝对的,如前台 Service 就是与 Notification 界面结合使用的)
具有较长时间的运行特性
注意: 是运行在主线程当中的
1.3 服务进程
服务进程是通过 startService() 方法启动的进程,但不属于前台进程和可见进程。例如,在后台播放音乐或者在后台下载就是服务进程。
系统保持它们运行,除非没有足够内存来保证所有的前台进程和可视进程。
第二篇:生命周期
2.1 Service 的生命周期
我们先来看看 Service 的生命周期 的基本流程
一张闻名遐迩的图
2.2 开启 Service 的两种方式
2.2.1 startService()
定义一个类继承 Service
在 Manifest.xml 文件中配置该 Service
使用 Context 的 startService(intent) 方法开启服务。
使用 Context 的 stopService(intent) 方法关闭服务。
该启动方式,app 杀死、Activity 销毁没有任何影响,服务不会停止销毁。
2.2.2 bindService()
创建 BindService 服务端,继承 Service 并在类中,创建一个实现 IBinder 接口的实例对象,并提供公共方法给客户端( Activity )调用。
从 onBinder() 回调方法返回该 Binder 实例。
在客户端( Activity )中, 从 onServiceConnection() 回调方法参数中接收 Binder ,通过 Binder 对象即可访问 Service 内部的数据。
在 manifests 中注册 BindService , 在客户端中调用 bindService() 方法开启绑定 Service , 调用 unbindService() 方法注销解绑 Service 。
该启动方式依赖于客户端生命周期,当客户端 Activity 销毁时, 没有调用 unbindService() 方法 , Service 也会停止销毁。
2.3 Service 有哪些启动方法,有什么区别,怎样停用 Service
在 Service 的生命周期中,被回调的方法比 Activity 少一些,只有 onCreate , onStart , onDestroy , onBind 和 onUnbind 。
通常有两种方式启动一个 Service , 他们对 Service 生命周期的影响是不一样的。
2.3.1 通过 startService
Service 会经历 onCreate 到 onStart ,然后处于运行状态,stopService 的时候调用 onDestroy
方法。
如果是调用者自己直接退出而没有调用 stopService 的话,Service 会一直在后台运行。
