-
调用其他组件的对外提供的方法:之前看到过一种思路,利用"接口+实现"的方式,定义一个ComponentBase 中间层,然后里面有每个组件对外提供方法调用的Interface,每个组件在初始化的时候就把这些Interface给实现了,然后其他组件需要用的时候就从ComponentBase里面取.
-
界面跳转:ARouter
2.23 自定义View 饼状图,点击事件,画文字
这个大家可以跟着hencoder老师的文章系统学习一下.
2.24 Android 数字签名
校验用户身份,校验数据的完整性
2.25 fragment用在哪里,与Activity的区别
-
当Activity需要模块化的时候
-
不同设备上的适配,比如平台和手机
-
Activity相对Fragment而言,非常笨重,一般小界面小模块用Fragment比较合适.或者首页的tab之类的.
2.26 RxJava原理
观察者模式,链式
2.27 EventBus原理
不太了解原理,很少使用,好像也是基于观察者模式的一个框架.
2.28 View绘制原理
主要是分析measure,layout,draw的过程,之前写过一篇比较完整的,如下.
2.29 Retrofit和OkHttp原理,拦截器
-
Retrofit的话,源码写的非常非常棒.主要是通过动态代理+获取方法上面的注解等,然后组装请求网络的参数,最后用OkHttp去请求网络
-
OkHttp的拦截器链设计得非常巧妙,是典型的责任链模式.并最终由最后一个链处理了网络请求,并拿到结果.
刚好之前写过文章分析过,如下:
2.30 点击事件传递机制,事件分为哪几种
事件传递大体过程: Activity--> Window-->DecorView --> View树从上往下
,传递过程中谁想拦截就拦截自己处理.MotionEvent是Android中的点击事件
主要事件类型
-
ACTION_DOWN 手机初次触摸到屏幕事件
-
ACTION_MOVE 手机在屏幕上滑动时触发,会回调多次
-
ACTION_UP 手指离开屏幕时触发
需要关注的几个方法
-
dispatchTouchEvent(event);
-
onInterceptTouchEvent(event);
-
onTouchEvent(event);
上面3个方法可以用以下伪代码来表示其关系:
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean consume = false;//事件是否被消费
if (onInterceptTouchEvent(ev)) {//调用onInterceptTouchEvent判断是否拦截事件
consume = onTouchEvent(ev);//如果拦截则调用自身的onTouchEvent方法
} else {
consume = child.dispatchTouchEvent(ev);//不拦截调用子View的dispatchTouchEvent方法
}
return consume;//返回值表示事件是否被消费,true事件终止,false调用父View的onTouchEvent方法
}
详细内容看我之前写的一篇文章,Android View事件分发机制
2.31 anr如何产生,Service触发anr是多长时间(20秒),如何解决anr?如何解决那种莫名其妙的anr?
我觉得anr就是在主线程做了耗时操作,比如io、读写文件、数据库操作等等.
anr发生之后一般会有日志,在/data/anr/traces.txt里面. 可以参考我的这篇文章拿anr日志,Android 未root查看ANR异常
2.32 Dialog和Activity是同一个Window?
不是同一个.
-
Activity的attach方法,这里是为Activity实例化了一个PhoneWindow实例
-
Dialog的构造方法里面也是实例化了一个PhoneWindow实例
2.33 Window,Activity,Dectorview之间的关系
Activity里面实例化了一个Window,Window里面有一个DecorView(根布局).
看一下这篇文章,凶残的程序员 出品,精品啊,特别特别干货.Android Window 机制探索
2.34 ConstraintLayout和RelativeLayout在绘制方面有何差别?
todo
2.35 onClick事件和onTouchListener在哪里回调?
如果一个View需要处理事件,它设置了OnTouchListener,那么OnTouchListener的onTouch方法会被回调.如果onTouch返回false,则onTouchEvent会被调用,反之不会.在onTouchEvent方法中,事件为Action.UP的时候会回调OnClickListener的onClick方法,可见OnClickListener的优先级很低.
2.36 应用如何保活?
这个确实不怎么了解,主要是不建议保活,提升用户体验.特别是安卓高版本,谷歌是封杀得很严格的,不建议保活.
之前在皇叔那里看到过一篇文章,可以参考参考
2.37 LinearLayout是如何测量(measure)的?如果有weight又是如何测量的?
先做一次测量,做完之后有空间剩余,有weight的View再测量一下,分一下剩余的空间。
2.38 屏幕适配
先前有鸿神的AndroidAutoLayout,根据宽高进行控件缩放,非常经典,很多项目可能都还在使用,但是已经停止更新了。然后就是有名的今日头条方案,出来还是有点时间了。原理其实就是更改density。
屏幕的宽度=设计稿宽度 * density
然后有AndroidAutoSize库,将今日头条方案融合进去还完善了很多问题,易用,完美。
3. Java四种引用
-
强引用,默认就是,宁愿OOM,也不回收
-
弱引用,内存不够会被回收
-
软引用,GC时会被回收
-
虚引用,它的作用在于跟踪垃圾回收过程,在对象被收集器回收时收到一个系统通知。
3.1 项目中遇到的最困难的事情是什么?如何解决的?
每个人遇到的情况不同,这个提前思考一下自己做过的项目最有挑战的地方。
3.2 Git基本操作
建议学习一下廖雪峰老师的课程。
3.3 Kotlin优势
-
完全兼容java
-
空安全
-
支持lambda表达式
-
支持扩展函数
-
更少的代码量,更快的开发速度
缺点就是有时候代码阅读性可能会降低。
3.4 Kotlin 协程是什么?
就是一个线程框架,提供了一套操作线程的api.
3.5 二叉树,广度优先遍历,深度优先遍历
推荐小灰的漫画算法
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
最后
文章所有资料全部已经打包整理好,另外小编手头上整理了大量Android架构师全套学习资料,Android核心高级技术PDF文档+全套高级学习资料+视频+2021 BAT 大厂面试真题解析
资料展示:
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》]( )收录**
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算