插桩是以静态的方式修改第三方的代码,也就是从编译阶段,对源代码(中间代码)进行编译,而后重新打包,是静态的篡改; 而Hook则不需要再编译阶段修改第三方的源码或中间代码,是在运行时通过反射的方式修改调用,是一种动态的篡改
###3.Android的签名机制?
参考回答:
Android的签名机制包含有消息摘要、数字签名和数字证书
- 消息摘要:在消息数据上,执行一个单向的 Hash 函数,生成一个固定长度的Hash值
- 数字签名:一种以电子形式存储消息签名的方法,一个完整的数字签名方案应该由两部分组成:签名算法和验证算法
- 数字证书:一个经证书授权(Certificate Authentication)中心数字签名的包含公钥拥有者信息以及公钥的文件
###4.Android5.0~10.0之间大的变化
参考回答:
4.1.Android5.0新特性
- MaterialDesign设计风格
- 支持64位ART虚拟机(5.0推出的ART虚拟机,在5.0之前都是Dalvik。他们的区别是:Dalvik,每次运行,字节码都需要通过即时编译器转换成机器码(JIT)。 ART,第一次安装应用的时候,字节码就会预先编译成机器码(AOT))
- 通知详情可以用户自己设计
4.2.Android6.0新特性
- 动态权限管理
- 支持快速充电的切换
- 支持文件夹拖拽应用
- 相机新增专业模式
4.3.Android7.0新特性
- 多窗口支持
- V2签名
- 增强的Java8语言模式
- 夜间模式
4.4.Android8.0(O)新特性
- 优化通知:通知渠道 (Notification Channel) 通知标志 休眠 通知超时 通知设置 通知清除
- 画中画模式:清单中Activity设置android:supportsPictureInPicture
- 后台限制
- 自动填充框架
- 系统优化
- 等等优化很多
4.5.Android9.0(P)新特性
- 室内WIFI定位
- “刘海”屏幕支持
- 安全增强
- 等等优化很多
4.6.Android10.0(Q)新特性
- 夜间模式:包括手机上的所有应用都可以为其设置暗黑模式。
- 桌面模式:提供类似于PC的体验,但是远远不能代替PC。
- 屏幕录制:通过长按“电源”菜单中的"屏幕快照"来开启。
###5.说下Measurepec这个类
参考回答:
作用:通过宽测量值widthMeasureSpec和高测量值heightMeasureSpec决定View的大小
组成:一个32位int值,高2位代表SpecMode(测量模式),低30位代表SpecSize( 某种测量模式下的规格大小)。
三种模式:
- UNSPECIFIED:父容器不对View有任何限制,要多大有多大。常用于系统内部。
- EXACTLY(精确模式):父视图为子视图指定一个确切的尺寸SpecSize。对应LyaoutParams中的match_parent或具体数值。
- AT_MOST(最大模式):父容器为子视图指定一个最大尺寸SpecSize,View的大小不能大于这个值。对应LayoutParams中的wrap_content。
决定因素:值由子View的布局参数LayoutParams和父容器的MeasureSpec值共同决定。具体规则见下图:
###6.请例举Android中常用布局类型,并简述其用法以及排版效率
参考回答:
Android中常用布局分为传统布局和新型布局
-
传统布局(编写XML代码、代码生成):
-
框架布局(FrameLayout):
-
线性布局(LinearLayout):
-
绝对布局(AbsoluteLayout):
-
相对布局(RelativeLayout):
-
表格布局(TableLayout):
-
新型布局(可视化拖拽控件、编写XML代码、代码生成):
-
约束布局(ConstrainLayout)
-
对于嵌套多层View而言,其排版效率:LinearLayout = FrameLayout >> RelativeLayout
###7.区别Animation和Animator的用法,概述其原理
参考回答:
- 动画的种类:前者只有透明度,旋转,平移,伸缩4种属性,而对于后者,只要是该控件的属性,且有setter该属性的方法就都可以对该属性执行一种动态变化的效果。
- 可操作的对象:前者只能对UI组件执行动画,但属性动画几乎可以对任何对象执行动画(不管它是否显示在屏幕上)。
- 动画播放顺序:在Animator中,AnimatorSet正是通过playTogether()、playSequentially()、animSet.play().with()、before()、after()这些方法来控制多个动画协同工作,从而做到对动画播放顺序的精确控制
###8.使用过什么图片加载库?Glide的源码设计哪里很微妙?
参考回答:
- 图片加载库:Fresco、Glide、Picasso等
- Glide的设计微妙在于:
- Glide的生命周期绑定:可以控制图片的加载状态与当前页面的生命周期同步,使整个加载过程随着页面的状态而启动/恢复,停止,销毁
- Glide的缓存设计:通过(三级缓存,Lru算法,Bitmap复用)对Resource进行缓存设计
- Glide的完整加载过程:采用Engine引擎类暴露了一系列方法供Request操作
###9.如何绕过9.0限制?
参考回答:
![](https://upload-images.jian
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
shu.io/upload_images/14140248-2f85f2ebaf861279.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
###10.对于应用更新这块是如何做的? (灰度,强制更新、分区域更新)
参考回答:
85f2ebaf861279.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
###10.对于应用更新这块是如何做的? (灰度,强制更新、分区域更新)
参考回答: