【Interview】汇总

1、面向对象问题

封装、继承、多态
面向对象的目的,代码的可重复性、可扩展性、可靠性。
理解java的三大特性之多态

2、UI相关

测量,布局,绘制
View Measure -----onMeasure
View Layout------onLayout
View draw------onDraw

measure总结

1.View的measure方法是final类型的,子类不可以重写,子类可以通过重写onMeasure方法来测量自己的大小,当然也可以不重写onMeasure方法使用系统默认测量大小。
2.View测量结束的标志是调用了View类中的setMeasuredDimension成员方法,言外之意是,如果你需要在自定义的View中重写onMeasure方法,在你测量结束之前你必须调用setMeasuredDimension方法测量才有效。
3.在Activity生命周期onCreate和onResume方法中调用View.getWidth()和View.getMeasuredHeight()返回值为0的,是因为当前View的测量还没有开始,这里关系到Activity启动过程,文章开头说了当ActivityThread类中的performResumeActivity方法执行之后才将DecorView添加到PhoneWindow窗口上,开始测量。在Activity生命周期onCreate在中performResumeActivity还为执行,因此调用View.getMeasuredHeight()返回值为0。
4.子视图View的大小是由父容器View和子视图View布局

1.视图View的布局逻辑是由父View,也就是ViewGroup容器布局来实现的。因此,我们如果自定义View一般都无需重写onMeasure方法,但是如果自定义一个ViewGroup容器的话,就必须实现onLayout方法,因为该方法在ViewGroup是抽象的,所有ViewGroup的所有子类必须实现onLayout方法。

2.当我们的视图View在布局中使用 android:visibility=”gone” 属性时,是不占据屏幕空间的,因为在布局时ViewGroup会遍历每个子视图View,判断当前子视图View是否设置了 Visibility==GONE,如果设置了,当前子视图View就会添加到父容器上,因此也就不占据屏幕空间。

3.必须在View布局完之后调用getHeight()和getWidth()方法获取到的View的宽高才大于0

layout布局总结

1.视图View的布局逻辑是由父View,也就是ViewGroup容器布局来实现的。因此,我们如果自定义View一般都无需重写onMeasure方法,但是如果自定义一个ViewGroup容器的话,就必须实现onLayout方法,因为该方法在ViewGroup是抽象的,所有ViewGroup的所有子类必须实现onLayout方法。

2.当我们的视图View在布局中使用 android:visibility=”gone” 属性时,是不占据屏幕空间的,因为在布局时ViewGroup会遍历每个子视图View,判断当前子视图View是否设置了 Visibility==GONE,如果设置了,当前子视图View就会添加到父容器上,因此也就不占据屏幕空间。

3.必须在View布局完之后调用getHeight()和getWidth()方法获取到的View的宽高才大于0

绘制Draw总结:

1.View绘制的画布参数canvas是由surface对象获得,言外之意,View视图绘制最终会绘制到Surface对象去。

2.父类View绘制主要是绘制背景,边框渐变效果,进度条,View具体的内容绘制调用了onDraw方法,通过该方法把View内容的绘制逻辑留给子类去实现。因此,我们在自定义View的时候都一般都需要重写父类的onDraw方法来实现View内容绘制。

3.不管任何情况,每一个View视图都会绘制 scrollBars滚动条,且绘制滚动条的逻辑是在父类View中实现,子类无需自己实现滚动条的绘制。

4.ViewGroup绘制的过程会对每个子视图View设置布局容器动画效果,如果你在ViewGroup容器布局里面设置了如下属性的话:

android:animateLayoutChanges="true"

简单项目
动画大全

3、四大组件及应用场景

Android四大组件(整理相关知识点)
Service的两种启动模式
Android 广播Broadcast的两种注册方式静态和动态

4、多线程

android 多线程 — 线程的面试题和答案

5、tcp/udp socket http基本通信协议

Android之B面试题⑤HTTPS和HTTP的区别
关于TCP,UDP,针对面试。超详细
UDP和TCP的面试题
Retrofit分析-漂亮的解耦套路

6、框架原理

从架构角度看Retrofit的作用、原理和启示
Retrofit源码学习之动态代理
稍做总结:Retrofit使用的,就是动态代理,方法注解、建造者,工厂模式和适配器等成熟的技术或模式,retrofit内部通过动态代理的模式,讲creat出来的包含接口信息的类传入到代理中(Proxy)。然后利用InvocationHandler将传入的接口信息根据需要拆解组合成serviceMethod类(ParameterHandler处理注解信息,callFactory处理网络请求,CallAdapter处理适配器信息,Converter处理类的转化),再转换成OkHttpCall,使用okhttp进行网络请求,返回的网络请求之后,再由事先定义好的适配器转换,得到接口定义的网络对象,最后提供接口返回数据

Android常见图片加载框架比较
Fresco图片框架内部实现原理探索

7、进程间通信

https://www.cnblogs.com/lizhengxian/p/5075635.html

8、插件化开发和热修复热更新、增量更新

andfix、tinker、Sophix

9、handle原理、屏幕适配、jvm,gc,静态内部类非静态内部类,ui线程向子线程发送消息,事件分发,webview和js交互

10、性能优化、oom、内存分配

性能优化
性能优化:
1、卡顿:
布局优化,减少层级,布局服用,减少无用属性避免过度绘制
启动优化,分布加载,异步加载,延期加载提高启动速度
合理刷新机制,减少刷新次数和刷新区域
2、内存优化
场景:
资源性对象未关闭。比如Cursor、File文件等,往往都用了一些缓冲,在不使用时,应该及时关闭它们。
注册对象未注销。
类的静态变量持有大数据对象
Handler临时性内存泄漏
WebView。WebView 存在着内存泄漏的问题,在应用中只要使用一次 WebView,内存就不会被释放掉。

优化内存空间:
对象引用。强引用、软引用、弱引用、虚引用四种引用类型,根据业务需求合理使用不同,选择不同的引用类型。
减少不必要的内存开销。注意自动装箱,增加内存复用,比如有效利用系统自带的资源、视图复用、对象池、Bitmap对象的复用。
使用最优的数据类型。比如针对数据类容器结构,可以使用ArrayMap数据结构,避免使用枚举类型,使用缓存Lrucache等等。
图片内存优化。可以设置位图规格,根据采样因子做压缩,用一些图片缓存方式对图片进行管理等等。
3、稳定性优化(Crash 和 ANR)
提高代码质量。比如开发期间的代码审核,看些代码设计逻辑,业务合理性等。
代码静态扫描工具。常见工具有Android Lint、Findbugs、Checkstyle、PMD等等。
Crash监控。把一些崩溃的信息,异常信息及时地记录下来,以便后续分析解决。
Crash上传机制。在Crash后,尽量先保存日志到本地,然后等下一次网络正常时再上传日志信息。
4、耗电优化
计算优化,避开浮点运算等。
避免 WaleLock 使用不当。
使用 Job Scheduler。
5、安装包大小优化
代码混淆。使用proGuard 代码混淆器工具,它包括压缩、优化、混淆等功能。
资源优化。比如使用 Android Lint 删除冗余资源,资源文件最少化等。
图片优化。比如利用 AAPT 工具对 PNG 格式的图片做压缩处理,降低图片色彩位数等。
避免重复功能的库,使用 WebP图片格式等。
插件化。比如功能模块放在服务器上,按需下载,可以减少安装包大小。

音视频及ndk开发

oppo

1、无限轮播收尾切换原理

2、视图平移

3、sp的commit和apply

IntentService和Service

https://blog.csdn.net/u013738122/article/details/80557219

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值