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概念的人,一般想出来的方案如下:

  1. 在转屏前将进度缓存,转屏后再读出来。
  2. 使用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?相关推荐

  1. Android面试系列文章2018之内存管理之UI卡顿篇

    Android面试系列文章2018之内存管理之UI卡顿篇 1.UI卡顿的原理   60ftp –> 16ms: Android系统每隔16ms都会对界面进行渲染一次,造成卡顿的原因就是Andro ...

  2. [转]Android面试系列之一

    看了下 不要当成面试题来看 其中很多东西还是挺有用的 原帖地址:http://androidtoast.iteye.com/blog/1202945 1, 谈谈你对Activity的理解? 对于这种& ...

  3. Android 面试系列(一)Android 基础

    文章目录 序言 四大组件 Activity Activity 生命周期 onStart() 与 onResume() 区别? Activity 启动模式 launchMode 使用 Intent 标记 ...

  4. Android 面试(四):Android Service 你真的能应答自如了吗?

    本次我们没有采取分享公众号推文的方法,我想直接这样看看效果. 本文首发于微信公众号「nanchen」,你可以直接在公众号搜索「nanchen」或者扫描最下面的二维码关注我.做不完的开源,写不完的矫情, ...

  5. Android面试基础之BroadcastReceiver详解(斗帝养成系列四)

    斗帝养成 大斗师,一至九星,斗气铠甲,斗气外放,聚气化固态,呈菱形.别说自己尽力了,那只是自欺欺人的假话. Android面试基础之Activity详解(斗帝养成系列一) Android面试基础之Se ...

  6. Android面试基础之ContentProvider详解(斗帝养成系列三)

    斗帝养成 斗师,一至九星,斗气纱衣,聚气化液态. 我匆忙了一生,我却留不下任何东西. Android面试基础之Activity详解(斗帝养成系列一) Android面试基础之Service详解(斗帝养 ...

  7. 2021年Android面试心得,系列教学

    Android没凉,只是比以前难混了 7年前Android异军突起,成了新的万亿级市场,无数掘金人涌入,期待可以一展拳脚. 那时候大环境下的手游圈,只要你能有个可以运行的连连看就能找到工作,走上赛道被 ...

  8. Android面试专题系列(四):Activity之间如何进行通信→LiveDataBus

    不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨-https://blog.csdn.net/cjm2484836553/article/details/105147592 <And ...

  9. 2021金九银十面试讴歌系列,Android面试不可不看的经验,android网络层框架设计实战

    技术博客或者github主页没有什么内容也写到简历里.记住技术博客或者github主页这一类的,本来都属于加分项,可有可无的,但是如果你写了,面试官誓必会满怀期待地点进去看,如果这个时候呈现给他的却是 ...

最新文章

  1. 双重惊喜——Windows Phone Developer Tools初体验
  2. 安装yaml报错:ERROR: Cannot uninstall 'PyYAML'.
  3. 宜昌市计算机一级考试真题,2018年上半年湖北省宜昌市计算机等级考试考务通知...
  4. hdu2159(二维完全背包)
  5. C#的Timer解析(转)
  6. struts2 表单回填与action里的属性
  7. 计算机组成原理——关于数据对齐存储
  8. (26)IMPCAT软件bit文件下载流程(FPGA不积跬步101)
  9. 嵌入式Linux入门9:Linux系统使用
  10. 对多个有规律表进行更新剔重复操作的存储过程(up8000)
  11. 商务利器 HAWK浩客G580无线演示器试用
  12. Python爬虫实战(二):爬取快代理构建代理IP池
  13. 12v电瓶20安时是什么意思
  14. Scrcpy投屏软件教程(将手机内容投屏到电脑上)
  15. pymilvus基操
  16. 华为设备配置Smart Link负载分担
  17. 电脑配置要多少功率的电源?电源功率越大越好吗?
  18. 蚂蚁分类信息系统5.8多城市UTF8开源优化版
  19. 基于直流潮流法的电力系统潮流计算程序设计
  20. java ssm基于身份识别的考生考试签到管理系统

热门文章

  1. 人工智能其实并不客观,算法会加剧刻板印象
  2. 调用其他脚本上方法的方法
  3. 多线程:为什么不能override start方法
  4. 15.2. NFS Client Configuration
  5. mysql修复坏表的方法
  6. 如何优雅安全地在深层数据结构中取值
  7. [WPF]学习笔记二---主窗体
  8. python命令行添加Tab键自动补全
  9. 高质量的友谊总是发生在两个优秀的独立人格之间
  10. C#中Hashtable表的应用