前言

为什么今天突然说到学习路线,学习资料。因为最近在看知乎的时候,我看到一个大家都比较在意的一个问题,就是大家对工资和自己具备的能力是否成正比报有疑虑,所以今天这篇文章不仅仅是给大家解答这个疑虑,更多的是让大家变得更加优秀

这是我印象深刻的一道题,很明显它是我的第一次,那时我去一家公司(暂时叫它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的交互问题,这个我们以后再讨论。

本文在开源项目:Android开发不会这些?如何面试拿高薪! 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

) 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

吐血整理!从外包月薪5K到阿里月薪15K,原理+实战+视频+源码相关推荐

  1. 从外包月薪5K到阿里月薪15K,原理+实战+视频+源码

    前言 转眼间,2020 年已过去一大半了,2020 年很难,各企业裁员的消息蛮多的,降职,不发年终奖等等.2020 年确实是艰难的一年.然而生活总是要继续,时间不给你丧的机会!如果我们能坚持下来,不断 ...

  2. 年末阿里百度等大厂技术面试题汇总,原理+实战+视频+源码

    前言: Android 应用开发发展到今天,已经成为一个非常成熟的技术方向,从目前的形势来看,Android开发相当火热,但是高级Android开发人才却比较少,现在移动互联网的开发者也逐步开始关注插 ...

  3. (视频+源码)助力年后跳槽:对标阿里P8的大数据开发全套教程

    随着人工智能.大数据.云计算.区块链等新技术出现,加速了产业互联网的到来,加速了传统行业产业链快速涌入到互联网的新世界,所以它是未来的大趋势,而大数据是这些基石,万物互联.机器学习都是大数据应用场景! ...

  4. android项目实战博学谷源码_阿里爆款SpringBoot项目实战PDF+源码+视频分享

    前言 关于SpringBoot网络上有太多的博客跟资料,其影响力想必不用我多说了.它作为当前最流行的微服务框架,不但使用更加简单,而且功能更加丰富.性能更加稳定和健壮.其"约定大于配置&qu ...

  5. (4.2.40)阿里开源路由框架ARouter的源码分析

    一需求背景 1 Android原生方案的不足 2 自定义路由框架的适用场景 3 对自定义路由框架的设想 二ARouter的概述 三ARouter的引入和使用 四源码分析 1 arouter-annot ...

  6. 吐血整理,2021年最新【阿里、头条、美团】【软件测试】面试题(持续更新!)

    根据我工作这几年来的面试经验,加上之前收集的资料,整理出来350+道软件测试工程师常考的面试题.字节跳动.阿里.腾讯.百度.快手.美团等大厂常考的面试题,在文章里面都有提到. 虽然这篇文章很长,但是绝 ...

  7. 吐血整理,2023年最新【阿里、头条、美团】【软件测试】面试题(持续更新)

    根据我工作这几年来的面试经验,加上之前收集的资料,整理出来350+道软件测试工程师常考的面试题.字节跳动.阿里.腾讯.百度.快手.美团等大厂常考的面试题,在文章里面都有提到. 虽然这篇文章很长,但是绝 ...

  8. 吐血整理,2020年最新【阿里、头条、美团】【软件测试】面试题(持续更新!)

    通知:[公众号更名为:程序员臻叔] 关注领福利: 回复「测试」:获取最常用的测试用例模版+常用的测试工具. 回复「面试」:臻叔原创<测试岗笔面试真题宝典> 回复「简历」:送你臻叔私人珍藏的 ...

  9. 整理一周的Python全品类资料包含100本电子书,还有独家实战项目源码公开!

    回复"pythonpdf",立刻领取100本全品类Python电子书 不知怎么的,最近不少关注我的读者都开始私信我怎么学好python?零基础转行是不是合适,还有希望吗?今年30了 ...

最新文章

  1. 【Gradle】管理库工程release及debug
  2. 如何用ASP.NET加密Cookie数据过程分析
  3. 你不知道的javascript事件
  4. Acwing 277. 饼干
  5. tfidf关键词提取_基于TextRank提取关键词、关键短语、摘要,文章排序
  6. HttpClient的使用方法
  7. synchronized 修饰在 static方法和非static方法的区别
  8. dsp 有fft程序吗_Python 中 FFT 快速傅里叶分析
  9. snmp扫描工具linux,SugarNMSTool-SugarNMSTool(snmp工具)下载 v2.0官方版--pc6下载站
  10. 一种基于LCD1602和AT24C02的单片机多功能电子密码锁设计(附论文+Proteus仿真+C程序等)
  11. 天玥运维安全网关(启明星辰堡垒机)无法登录资源主机的问题
  12. 开发自己的DJI四旋翼无人机(A3飞控Onboard SDK和Mobile SDK介绍)
  13. [新] 入手树莓派后要做的一些事
  14. Go学习笔记 -- 方法
  15. 不用P图!用Python给头像加圣诞帽并制作成可执行软件!
  16. 解决not well-formed (invalid token)BUG,xml标签转到txt标签,txt标签转到xml标签,滑动窗口切割图像并且同步标签
  17. 游戏指标ACU PCU APA ARPU
  18. Postman之postman interceptor插件
  19. [Perl]Perl匹配非空白字符[^\s]
  20. [buuctf]msic2

热门文章

  1. 2013年至今百余家P2P网站跑路
  2. 企业级自动化运维平台
  3. OpenCVSharp(C# OpenCV)图像去水印实例(二) 去除水印并保留文本原始色彩
  4. 【招银网络科技java面试题目面试经验】-看准网
  5. 免费网络电话App 传统通信破冰者
  6. 分时操作系统(20世纪70年代)
  7. android屏幕截屏
  8. markdown文件的常用编写语法(图文并茂)
  9. Num.02-CSS
  10. springboot_游戏虚拟物品交易平台