安卓面经_安卓基础面全解析(2/30)Service全解析
牛客高级系列专栏:
安卓(安卓系统开发也要掌握)
- 想通关安卓面试,请看(承诺免费售后答疑):《150道安卓高频面试题目录及答案链接》
- 想通关安卓系统面试,请看:《140道安卓系统Framework面试题目录及答案链接》
- 想进阶安卓开发,请看(承诺免费售后答疑):《Android进阶知识体系解析_15大安卓进阶必备知识点》
- 想了解安卓APP完整开发流程,请看(承诺免费售后答疑):《安卓APP完整开发流程》
- 想掌握安卓App性能优化,请看(承诺免费售后答疑):《安卓性能优化讲解和实战专栏》
- 想掌握Gradle语法和配置,制作Gradle插件,请看(承诺免费售后答疑):《安卓Gradle语法解析和实践大全》
嵌入式
- 想通关嵌入式面试,请看: 《111道嵌入式面试题目录及答案链接》
- 想多掌握几个嵌入式项目,请看:《6个嵌入式项目交流分享(附源码)》
本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业安卓开发经验,该专栏整理本人对常见安卓高频开发面试题的理解;
网上安卓资料千千万,笔者将继续维护专栏,一杯奶茶价格不止提供答案解析,承诺提供专栏内容免费技术答疑,直接咨询即可。助您提高安卓面试准备效率,为您面试保驾护航!
正文开始⬇
Service是Android四大组件之一,其中Service和Activity是面试官最喜欢问的。如果面试官问你:
- 请介绍Service的启动方式,启动方式的区别?⭐⭐⭐⭐⭐⭐(满分5分,这道题6分,你懂的~)
- 请介绍Service的生命周期?⭐⭐⭐⭐⭐
- Activity、Service、intent之间的联系?⭐⭐⭐⭐
- 在Activity和Service中创建Thread的区别?(进阶题)⭐⭐⭐
- android进程的优先级?以及如何保证Service不被杀死?(进阶题)⭐⭐⭐⭐
- 直接在Activity中创建一个thread跟在service中创建一个thread之间的区别?(附加题)⭐⭐
看完以下的解析,一定可以让面试官眼前一亮。
目录
- 1、什么是Service
- 2、Service的启动方式
- 2.1 startService()
- 2.2 bindService()
- 2.3 两种启动方式的区别
- 通过startService启动
- 通过bindService绑定
- startService/bindService同时使用
- 2.4 在什么情况下使用 startService 或 bindService 或 同时使用startService 和 bindService?
- 3、Service种类和优先级
- 3.1 Service的种类
- 3.2 android中进程的优先级
- 4、说说Activity、Intent、Service 是什么关系?(进阶题)
- 5、IntentService。(进阶题)
- 6、直接在Activity中创建一个thread跟在service中创建一个thread之间的区别?(附加题)
1、什么是Service
Service意为“服务”,相对于Activity是一个有可见界面的、为实现交互而提供的Android应用组件,Service则是一个可以在后台长期运行但又不使用用户界面的Android应用组件。它可以和其他的组件形成一定联系,通过传达信息来联系多个组件共同执行某个操作。举个最简单的例子,你此时正在用手机听歌曲,播放歌曲的进程就是一个后台服务。
2、Service的启动方式
对于Service的生命周期,不同的启动方式会有不同的生命周期,所以了解不同的启动方式的同时,也要掌握Service的生命周期。
2.1 startService()
生命周期见上图左时序图。当另一个组件可以通过调用 startService()方法来启动特定的服务,此时Service生命周期中的onStartCommand()方法被调用。当调用startService()方法时,其他组件需要在方法中传递一个intent参数,服务会在onStartCommand()中接收到intent并获取一些数据。比如ActivityA需要上报一些用户数据到服务器上面,就可以通过startService()来启动ServiceA,并将需要上报的数据传递给ServiceA,在ServiceA里面调用一些网络接口,把数据直接上报到服务器上面。
当一个服务以这种方式启动时,它的生命周期不再受启动它的组件的影响,它可以在后台无限期地运行,如上一段的例子里,就算ActvityA挂了,ServiceA仍在后台运行,直到ServiceA自己调用stopSelf()或者其他的组件手动调用stopService(ServiceA)时ServiceA才会停止。
2.2 bindService()
生命周期见上图右侧时序图。从名字上可以看出这个“绑定”一个服务,要创建一个支持绑定的Service,我们必须要重写它的onBind()方法,这个方***返回一个IBinder对象,它是客户端用来和服务器进行交互的接口。如ActivityA绑定ServiceA,此时ActivityA称为客户端,ServiceA称为服务端,ActivityA有从ServiceA返回的一个IBinder对象,通过该对象,ActivityA就可以调用ServiceA里面的方法。
这是一种比startService更复杂的启动方式,同时使用这种方式启动的service也能完成更多的事情,比如其他组件可向其发送请求,接受来自它的响应,甚至通过它来进行IPC等等。
2.3 两种启动方式的区别
下面就这两种启动方式,详细介绍具体的生命周期过程。按我标准,题目满分是5分,这个题目是6分,你懂得~
通过startService启动
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
#提供免费售后答疑!!花一杯奶茶的钱获得安卓面试答疑服务,稳赚不赔# Android发展已经很多年,安卓资料网上千千万,本专栏免费提供专栏内容技术答疑!!私聊当天必回。在阅读过程或者其他安卓学习过程有疑问,都非常欢迎私聊交流。
顺丰集团工作强度 369人发布