Android 面试系列 Dn.1---- Service?
Yo....Yo..Yo... 各位学zha老爷们好,我是靠颜值混日子的榴莲欧巴,欢迎学zha老爷们按时来阅读今天的
Android面试系列。如果您是一个年龄小于24岁妹纸,一定要关注微信公众号“DvlpNews”,榴莲欧巴有一份绝
世秘籍要亲自传授给你.复制代码
面试题:知道Service吗,它有几种启动方式?
这是我印象深刻的一道题,很明显它是我的第一次,那时我去一家公司(暂时叫它T公司吧)面试外派到韩国三星的工作机会。T公司的面试官是一个叫Bely架构师,显然那个时候Android开发是稀缺资源,知道Service那都不得了了,当然Bely也没打算为难我(必竟也工作4年多了,人长得也不错),我轻松对答:
Service是一个专门在后台处理长时间任务的Android组件,它没有UI。它有两种启动方式,startService和bindService。
你猜得没错,Bely紧接着问我:这两种启动方式的区别。
startService只是启动Service,启动它的组件(如Activity)和Service并没有关联,只有当Service调用stopSelf或者其他组件调用stopService服务才会终止。
bindService方法启动Service,其他组件可以通过回调获取Service的代理对象和Service交互,而这两方也进行了绑定,当启动方销毁时,Service也会自动进行unBind操作,当发现所有绑定都进行了unBind时才会销毁Service。
这应该是比较关键的区别了,在面试前我刚刚用Serivce做过一个音乐播放器。几年后,我在深圳面试过很多人,他们中有60-70%的人没有使用Service的经验,让我一度感觉得深圳这座城市做Android开发的比较浮躁。因为这儿工作机会太多了,初级的开发者都比较急功近利,不需要在自己身上下太多的功夫也可以找到工作(当然这是片面的认识)。
当然还有其他的区别,如两种调用对Service生命周期函数影响,面试官也可以就这个问题展开一下。
当我遇到面试者知道怎么使用Service,也如多年前的我可以自如的答出startService和bindService的区别时,我一般会多问一句:
Service的onCreate回调函数可以做耗时的操作吗?
很多人都会说:可以。
原形毕露,他前面的回答只是在面试前预习了一下面试题而已。如果知道Service的onCreate是在主线程(ActivityThread)中调用的,耗时操作会阻塞UI,我一般再接着问:
如果需要做耗时的操作,你会怎么做?
问题便这样展开了,一个人是否真正懂得原理会灵活运用,一下子便能看出来。 当面试者回答到线程和Handler方式时,我会再问一下对方:
是否知道IntentService,在什么场景下使用IntentService?
这也是面试官要看的点,真正的项目需要一个开发人员对某个问题有一定的深度,也需要对整个Android的知识点有一定的广度。深度代表这个人对问题认真对待有钻研的精神,广度代表这个人在面对同一个问题时,会更容易从多种可行的方案中选出最合适的一种。
Service的实际项目中一直被很多人忽略,为什么我一再强调Service很重要,我们来看看,如果对Service完全无知会在工作中遇到什么问题。
场景:如果一个应用要从网络上下载MP3文件,并在Activity上展示进度条,这个Activity要求是可以转屏的。那么在转屏时Actvitiy会重启,如何保证下载的进度条能正确展示进度呢?
没有Service概念的人,一般想出来的方案如下:
- 在转屏前将进度缓存,转屏后再读出来。
- 使用android:configChanges设置,让转屏时Activity不销毁和重建。
针对第1个方案,我会继续问他将进度值存在哪里? 转屏的过程中,我们知道Activity的重建算是比较耗时的,会可能会有几百毫秒以上,那么这时候下载线程仍然在工作,进度肯定和保存时的进度不一致了,如何处理这个问题呢?
第2个方案,大家可以自己展开思考,实际的项目中可能会需要额外做一些事情来处理ContentView的横竖布局的问题。
如果使用Service来解决这个问题,看似是比较完美的,不过就会涉及Activity(UI)和Service的交互问题,这个我们以后再讨论。
小结
当我们知道了Service的用途,心中有一个Service相关的概念时,针对实际的场景还是要做具体的分析再决定是否使用Service。因为Service仍然是在主线程中调用,还是要开线程才能处理长时间的工作,Service和UI的交互也让这个方式变得不那么简便。如果你只需要在当前界面去做一些耗时操作,界面退出或改变时,工作也要停止,那么这时直接使用Thread(或者AsyncTask, ThreadHandler)会更合适你。
文章作者:Goeasyway
原文地址:https://www.jianshu.com/p/7a7db9f8692d
往期Android面试系列内容,请关注公众号“DvlpNews”。
关注『DvlpNews』
把握前沿技术脉搏
Android 面试系列 Dn.1---- Service?相关推荐
- Android面试系列文章2018之内存管理之UI卡顿篇
Android面试系列文章2018之内存管理之UI卡顿篇 1.UI卡顿的原理 60ftp –> 16ms: Android系统每隔16ms都会对界面进行渲染一次,造成卡顿的原因就是Andro ...
- [转]Android面试系列之一
看了下 不要当成面试题来看 其中很多东西还是挺有用的 原帖地址:http://androidtoast.iteye.com/blog/1202945 1, 谈谈你对Activity的理解? 对于这种& ...
- Android 面试系列(一)Android 基础
文章目录 序言 四大组件 Activity Activity 生命周期 onStart() 与 onResume() 区别? Activity 启动模式 launchMode 使用 Intent 标记 ...
- Android 面试(四):Android Service 你真的能应答自如了吗?
本次我们没有采取分享公众号推文的方法,我想直接这样看看效果. 本文首发于微信公众号「nanchen」,你可以直接在公众号搜索「nanchen」或者扫描最下面的二维码关注我.做不完的开源,写不完的矫情, ...
- Android面试基础之BroadcastReceiver详解(斗帝养成系列四)
斗帝养成 大斗师,一至九星,斗气铠甲,斗气外放,聚气化固态,呈菱形.别说自己尽力了,那只是自欺欺人的假话. Android面试基础之Activity详解(斗帝养成系列一) Android面试基础之Se ...
- Android面试基础之ContentProvider详解(斗帝养成系列三)
斗帝养成 斗师,一至九星,斗气纱衣,聚气化液态. 我匆忙了一生,我却留不下任何东西. Android面试基础之Activity详解(斗帝养成系列一) Android面试基础之Service详解(斗帝养 ...
- 2021年Android面试心得,系列教学
Android没凉,只是比以前难混了 7年前Android异军突起,成了新的万亿级市场,无数掘金人涌入,期待可以一展拳脚. 那时候大环境下的手游圈,只要你能有个可以运行的连连看就能找到工作,走上赛道被 ...
- Android面试专题系列(四):Activity之间如何进行通信→LiveDataBus
不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨-https://blog.csdn.net/cjm2484836553/article/details/105147592 <And ...
- 2021金九银十面试讴歌系列,Android面试不可不看的经验,android网络层框架设计实战
技术博客或者github主页没有什么内容也写到简历里.记住技术博客或者github主页这一类的,本来都属于加分项,可有可无的,但是如果你写了,面试官誓必会满怀期待地点进去看,如果这个时候呈现给他的却是 ...
最新文章
- 双重惊喜——Windows Phone Developer Tools初体验
- 安装yaml报错:ERROR: Cannot uninstall 'PyYAML'.
- 宜昌市计算机一级考试真题,2018年上半年湖北省宜昌市计算机等级考试考务通知...
- hdu2159(二维完全背包)
- C#的Timer解析(转)
- struts2 表单回填与action里的属性
- 计算机组成原理——关于数据对齐存储
- (26)IMPCAT软件bit文件下载流程(FPGA不积跬步101)
- 嵌入式Linux入门9:Linux系统使用
- 对多个有规律表进行更新剔重复操作的存储过程(up8000)
- 商务利器 HAWK浩客G580无线演示器试用
- Python爬虫实战(二):爬取快代理构建代理IP池
- 12v电瓶20安时是什么意思
- Scrcpy投屏软件教程(将手机内容投屏到电脑上)
- pymilvus基操
- 华为设备配置Smart Link负载分担
- 电脑配置要多少功率的电源?电源功率越大越好吗?
- 蚂蚁分类信息系统5.8多城市UTF8开源优化版
- 基于直流潮流法的电力系统潮流计算程序设计
- java ssm基于身份识别的考生考试签到管理系统