面试题十二:异常与性能优化2(UI卡顿、内存泄漏),2024年最新android一年经验面试

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文

======

相关文章:


Android性能优化 - 消除卡顿

Android 性能优化之内存检测、卡顿优化、耗电优化、APK瘦身

Android性能优化之UI卡顿优化

1、UI卡顿原理


卡顿是人的一种视觉感受,比如我们滑动界面时,如果滑动不流程我们就会有卡顿的感觉,这种感觉我们需要有一个量化指标,在编程时如果开发的程序超过了这个指标我们认为其是卡顿的。

FPS(帧率):每秒显示帧数(Frames per Second)。表示图形处理器每秒钟能够更新的次数。高的帧率可以得到更流畅、更逼真的动画。一般来说12fps大概类似手动快速翻动书籍的帧率,这明显是可以感知到不够顺滑的。30fps就是可以接受的,但是无法顺畅表现绚丽的画面内容。提升至60fps则可以明显提升交互感和逼真感,但是一般来说超过75fps就不容易察觉到有明显的流畅度提升了,如果是VR设备需要高于75fps,才可能消除眩晕的感觉。

开发app的性能目标就是保持60fps,这意味着每一帧你只有16ms≈1000/60的时间来处理所有的任务。Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps。

如果你的某个操作花费时间是24ms,系统在得到VSYNC信号的时候就无法进行正常渲染,这样就发生了丢帧现象。那么用户在32ms内看到的会是同一帧画面。

如果此时用户在看动画的执行或者滚动屏幕(如RecyclerView),就会感觉到界面不流畅了(卡了一下)。丢帧导致卡顿产生。

2、UI卡顿原因分析


核心:分析在16ms中我们的应用做了什么工作,那些工作阻止我们在16ms时更新界面。

通常情况下,在16ms中我们有那些工作需要处理。

单以XML布局被绘制出来为例进行说明。

处理过程:

  1. CPU负责把UI组件计算成多边形和纹理

  2. OpenGL负责绘制图像(Display List)

  3. GPU栅格化需要显示内容并渲染到屏幕上

而实际开发中我们还加入交互、业务处理等工作,这些工作都需要在16ms中处理完成。对于开发人员来说,需要有一个工具,很直观的帮助我们判断出那些工作占用了多少时间。

导致UI卡顿的原因:

  • 1、认为在UI线程中做轻微耗时操作,导致UI线程卡顿;

  • 2、布局layout过于复杂,无法再16ms内完成渲染;

  • 3、同一时间动画执行次数过多,导致CPU或GPU负载过重;

  • 4、View过度绘制,导致某些像素在同一帧时间内被绘制多次,从而是CPU或GPU负载过重;

  • 5、View的频繁绘制触发measure、layout,导致measure、layout累计耗时过多及整个View频繁地重新渲染;

  • 6、内存频繁触发GC过多,导致暂时阻塞渲染操作;

  • 7、冗余资源及逻辑等导致加载和执行缓慢;

  • 8、ANR

3、UI卡顿总结


1、布局优化;

2、列表及Adapter优化;

3、背景和图片等内存分配优化;

4、避免ANR;

二、内存泄漏

======

1、java内存泄漏基础知识;


1)、java内存分配策略

a、静态存储区

b、栈区

c、堆区

2)、java是如何管理内存的

3)、java中的内存泄漏

内存泄漏是指无用对象(不再使用的对象)持续占有内存或者无用对象的内存得不到及时释放,从而造成的内存空间的浪费成为内存泄漏。

2、Android内存泄漏;


1)、单例

public class AppManager {

//有内存泄漏的问题:

// private static AppManager instance;

// private Context context;

// private AppManager(Context context) {

// this.context = context;

// }

// public static AppManager getInstance(Context context) {

// if (instance == null) {

// instance = new AppManager(context);

// }

// return instance;

// }

// 修复内存泄漏的写法:

private static AppManager instance;

private Context context;

private AppManager(Context context) {

this.context = context.getApplicationContext();// 使用Application 的context

}

public static AppManager getInstance(Context context) {

if (instance == null) {

instance = new AppManager(context);

}

return instance;

}

}

2)、匿名内部类

一般,把内部类设置为静态内部类,使其不会持有外部类的引用,从而就不会有内存泄漏的问题。

static class TestResource {

private static final String TAG = “”;

//…

}

3)、handler

handler造成内存泄漏的原因:handler是非静态内部类,持有外部类的引用,而handler内部会有未完成的message,message关联到handler,handler又关联到外部的activity,导致activity需要被回收的时候无法被回收,从而造成内存泄漏。

public class MainActivity extends AppCompatActivity {

//容易造成内存泄漏的写法:

// private Handler mHandler = new Handler() {

// @Override

// public void handleMessage(Message msg) {

// //…

// }

// };

//

总结

**其实上面说了这么多,钱是永远赚不完的,在这个知识付费的时代,知识技能提升才是是根本!我作为一名8年的高级工程师,知识技能已经学习的差不多。**在看这篇文章的可能有刚刚入门,刚刚开始工作,或者大佬级人物。

像刚刚开始学Android开发小白想要快速提升自己,最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以这里分享一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

这么重要的事情说三遍啦!点赞+点赞+点赞!

【Android高级架构师系统学习资料】高级架构师进阶必备——设计思想解读开源框架

第一章、热修复设计
第二章、插件化框架设计
第三章、组件化框架设计
第四章、图片加载框架
第五章、网络访问框架设计
第六章、RXJava 响应式编程框架设计
第七章、IOC 架构设计
第八章、Android 架构组件 Jetpack

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

OC 架构设计
第八章、Android 架构组件 Jetpack

[外链图片转存中…(img-PlGrSsF6-1713190977186)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-2673tuvC-1713190977186)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值