Android进阶之路Android开发Android开发

2019最新Android中级面试题目汇总解答

2019-08-16  本文已影响16人  Android_until

注:因为实际开发与参考答案会有所不同,再者怕误导大家,所以这些面试题答案还是自己去理解!面试官会针对简历中提到的知识点由浅入深提问,所以不要背答案,多理解。

Android进阶延伸点

1、如何进行单元测试,如何保证App稳定 ?

参考回答:

要测试Android应用程序,通常会创建以下类型自动单元测试

注意:单元测试不适合测试复杂的UI交互事件

App的稳定主要决定于整体的系统架构设计,同时也不可忽略代码编程的细节规范,正所谓“千里之堤,溃于蚁穴”,一旦考虑不周,看似无关紧要的代码片段可能会带来整体软件系统的崩溃,所以上线之前除了自己本地化测试之外还需要进行Monkey压力测试

少部分面试官可能会延伸,如Gradle自动化测试、机型适配测试等

2.Android中如何查看一个对象的回收情况 ?

参考回答:

3.Apk的大小如何压缩 ?

参考回答:

3.1一个完整APK包含以下目录(将APK文件拖到Android Studio):
3.2.减少res,压缩图文文件

图片文件压缩是针对jpg和png格式的图片。我们通常会放置多套不同分辨率的图片以适配不同的屏幕,这里可以进行适当的删减。在实际使用中,只保留一到两套就足够了(保留一套的话建议保留xxhdpi,两套的话就加上hdpi),然后再对剩余的图片进行压缩(jpg采用优图压缩,png尝试采用pngquant压缩)

3.3.减少dex文件大小
3.4.减少lib文件大小

4.如何通过Gradle配置多渠道包?

参考回答:

首先要了解设置多渠道的原因。在安装包中添加不同的标识,配合自动化埋点,应用在请求网络的时候携带渠道信息,方便后台做运营统计,比如说统计我们的应用在不同应用市场的下载量等信息

5.插件化原理分析

参考回答:

插件化是指将 APK 分为宿主和插件的部分。把需要实现的模块或功能当做一个独立的提取出来,在 APP 运行时,我们可以动态的载入或者替换插件部分,减少宿主的规模

而热修复则是从修复bug的角度出发,强调的是在不需要二次安装应用的前提下修复已知的bug。能

类加载机制
Android中常用的两种类加载器,DexClassLoader和PathClassLoader,它们都继承于BaseDexClassLoader,两者区别在于PathClassLoader只能加载内部存储目录的dex/jar/apk文件。DexClassLoader支持加载指定目录(不限于内部)的dex/jar/apk文件

插件通信:通过给插件apk生成相应的DexClassLoader便可以访问其中的类,可分为单DexClassLoader和多DexClassLoader两种结构。

资源加载

6.组件化原理

参考回答:

引入组件化的原因:项目随着需求的增加规模变得越来越大,规模的增大导致了各种业务错中复杂的交织在一起, 每个业务模块之间,代码没有约束,带来了代码边界的模糊,代码冲突时有发生, 更改一个小问题可能引起一些新的问题, 牵一发而动全身,增加一个新需求,需要熟悉相关的代码逻辑,增加开发时间

组件化开发流程就是把一个功能完整的App或模块拆分成多个子模块(Module),每个子模块可以独立编译运行,也可以任意组合成另一个新的 App或模块,每个模块即不相互依赖但又可以相互交互,但是最终发布的时候是将这些组件合并统一成一个apk,遇到某些特殊情况甚至可以升级或者降级

举个简单的模型例子

App是主application,ModuleA和ModuleB是两个业务模块(相对独立,互不影响),Library是基础模块,包含所有模块需要的依赖库,以及一些工具类:如网络访问、时间工具等

注意:提供给各业务模块的基础组件,需要根据具体情况拆分成 aar 或者 library,像登录,基础网络层这样较为稳定的组件,一般直接打包成 aar,减少编译耗时。而像自定义 View 组件,由于随着版本迭代会有较多变化,就直接以源码形式抽离成 Library

7.跨组件通信

参考回答:

7.1.跨组件通信场景:
7.2.跨组件通信方案分析:
7.3.如何管理过多的路由表?
7.4.ARouter路由原理:

ARouter维护了一个路由表Warehouse,其中保存着全部的模块跳转关系,ARouter路由跳转实际上还是调用了startActivity的跳转,使用了原生的Framework机制,只是通过apt注解的形式制造出跳转规则,并人为地拦截跳转和设置跳转条件

常见的组件化方案如下

Android中级面试题目汇总解答到此就结束了想获取更多Android方面的技术知识或者面试资料的可以添加QQ群:
Android开发交流群:1018342383

上一篇下一篇

猜你喜欢

热点阅读