Android超级程序员

Android超级程序员

前言

很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。

下述是我整理的Android面试题汇总,由于篇幅原因,在这只把热点技术部分的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我更新的知识点,同时这份面试集锦的整理也花费了我很多时间,有需要的朋友可以帮忙转发分享下,点个赞~

1.组件化

(1)概念:

组件化:是将一个APP分成多个module,每个module都是一个组件,也可以是一个基础库供组件依赖,开发中可以单独调试部分组件,组件中不需要相互依赖但是可以相互调用,最终发布的时候所有组件以lib的形式被主APP工程依赖打包成一个apk。

(2)由来:

  1. APP版本迭代,新功能不断增加,业务变得复杂,维护成本高
  2. 业务耦合度高,代码臃肿,团队内部多人协作开发困难
  3. Android编译代码卡顿,单一工程下代码耦合严重,修改一处需要重新编译打包,耗时耗力。
  4. 方便单元测试,单独改一个业务模块,不需要着重关注其他模块。

(3)优势:

  1. 组件化将通用模块独立出来,统一管理,以提高复用,将页面拆分为粒度更小的组件,组件内部出了包含UI实现,还可以包含数据层和逻辑层
  2. 每个组件度可以独立编译、加快编译速度、独立打包。
  3. 每个工程内部的修改,不会影响其他工程。
  4. 业务库工程可以快速拆分出来,集成到其他App中。
  5. 迭代频繁的业务模块采用组件方式,业务线研发可以互不干扰、提升协作效率,并控制产品质量,加强稳定性。
  6. 并行开发,团队成员只关注自己的开发的小模块,降低耦合性,后期维护方便等。

(4)考虑问题:

模式切换:如何使得APP在单独调试跟整体调试自由切换

组件化后的每一个业务的module都可以是一个单独的APP(isModuleRun=false), release 包的时候各个业务module作为lib依赖,这里完全由一个变量控制,在根项目 gradle.properties里面isModuleRun=true。isModuleRun状态不同,加载application和AndroidManifest都不一样,以此来区分是独立的APK还是lib。

在build.grade里面配置:

史上最全的Android热点技术面试题集锦-LMLPHP

资源冲突

当我们创建了多个Module的时候,如何解决相同资源文件名合并的冲突,业务Module和BaseModule资源文件名称重复会产生冲突,解决方案在于:

每个 module 都有 app_name,为了不让资源名重名,在每个组件的 build.gradle 中增加 resourcePrefix “xxx_强行检查资源名称前缀。固定每个组件的资源前缀。但是 resourcePrefix 这个值只能限定 xml 里面的资源,并不能限定图片资源。

依赖关系

多个Module之间如何引用一些共同的library以及工具类

组件通信

组件化之后,Module之间是相互隔离的,如何进行UI跳转以及方法调用,具体可以使用阿里巴巴ARouter或者美团的WMRouter等路由框架。

各业务Module之前不需要任何依赖可以通过路由跳转,完美解决业务之间耦合。

入口参数

我们知道组件之间是有联系的,所以在单独调试的时候如何拿到其它的Module传递过来的参数

Application

当组件单独运行的时候,每个Module自成一个APK,那么就意味着会有多个Application,很显然我们不愿意重复写这么多代码,所以我们只需要定义一个BaseApplication即可,其它的Application直接继承此BaseApplication就OK了,BaseApplication里面还可定义公用的参数。

2.插件化

(1)概述

提到插件化,就不得不提起方法数超过65535的问题,我们可以通过Dex分包来解决,同时也可以通过使用插件化开发来解决。插件化的概念就是由宿主APP去加载以及运行插件APP。

(2优点)

在一个大的项目里面,为了明确的分工,往往不同的团队负责不同的插件APP,这样分工更加明确。各个模块封装成不同的插件APK,不同模块可以单独编译,提高了开发效率。 解决了上述的方法数超过限制的问题。可以通过上线新的插件来解决线上的BUG,达到“热修复”的效果。 减小了宿主APK的体积。

(3缺点)

插件化开发的APP不能在Google Play上线,也就是没有海外市场。

最后

以上就是Android热点技术部分的面试题目,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我更新的知识点,同时这份面试集锦的整理也花费了我很多时间,有需要的朋友可以帮忙转发分享下,点个赞~

漫漫Android开发之路,你我只是其中的一小部分……只有不断的学习、进阶,才是我们的出路!才跟得上时代的进步!

这边我整理了一些资料,把它拿出来分享给大家,一方面是希望能够帮助大家提高,一方面也是警醒自己,要不断学习、不断提升,进阶才是王道!

分享给大家的资料包括高级架构技术进阶脑图Android开发面试专题资料,还有高级进阶架构资料包括但不限于【高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术】希望能帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也是可以分享给身边好友一起学习的!

关注微信公众号【Android开发之家】获取小编为大家收录整理的资料
史上最全的Android热点技术面试题集锦-LMLPHP
史上最全的Android热点技术面试题集锦-LMLPHP
史上最全的Android热点技术面试题集锦-LMLPHP

07-22 16:18