Android
文章平均质量分 87
移动开发技术栈
Android开发者
展开
-
四月刚出炉的Kotlin面试题总结,附带答案
面试是我们进入一个公司的门槛,通过了面试才能进入公司,你的面试结果和你的薪资是息息相关的。那如何才能顺利的通过面试,得到公司的认可呢?面试Kotlin开发要注意哪些问题呢?下面和笔者一起来看看吧。这里分享一下笔者近几年的面试总结!原创 2023-04-03 16:05:21 · 2088 阅读 · 0 评论 -
Android性能优化 -- 图论在启动优化中的应用
在Application中,做了很多初始化工作,像sdk的初始化、业务模块的初始化等等,当app启动的时候,这部分会被首先加载,然后才会执行Activity的onCreate方法加载;如果耗时严重,那么就会出现启动白屏的情况。那么异步加载或者延迟加载会有问题吗?只能说不一定,如果是异步加载,可能存在的场景就是Activity启动后立刻回调用某个sdk的方法,因为是异步加载可能sdk还没初始化完成,那么就会报错;原创 2023-03-12 20:01:49 · 394 阅读 · 0 评论 -
View的基本概念与MeasureSpec
View的绘制是由measuer、layout、draw三个过程才能完整的绘制一个View,其中measure是测量View的宽、高,layout是为了确认View在父容器所在的位置,draw是负责在屏幕上将View绘制出来。从代码中可以知道,子元素的MeasureSpec的创建与父元素的MeasureSpec和子元素本身的LayoutParams有关,此外还和View的margin,padding有关,具体可以查看getChildMeasureSpec的源码。原创 2023-03-11 21:58:41 · 430 阅读 · 0 评论 -
Jetpack全家桶手册之ViewModel 源码分析
分析源码时我们可以不计较细枝末节,只分析主要的逻辑即可。因此我们来思考几个问题,并从源码中寻找答案如何做到 activity 重建后 ViewModel 仍然存在?如何做到 fragment 重建后 ViewModel 仍然存在?如何控制作用域?(即保证相同作用域获取的 ViewModel 实例相同)如何避免内存泄漏?维持我们一贯的风格,我们先来大胆地猜一猜对于问题1 :activity 有着 saveInstanceState 机制,因此可能通过该机制来处理(事实证明不是。原创 2023-03-11 20:34:41 · 226 阅读 · 0 评论 -
Android Flutter:图文解析 Widget组件生命周期
Flutter 作为Google出品的一个新兴的跨平台移动客户端UI开发框架,正在被越来越多的开发者和组织使用,包括阿里的咸鱼、腾讯的微信等。今天,我将采用图文方式清晰讲解Flutter中Widget的生命周期,希望你们会喜欢。Flutter里UI控件的统称。通过组合不同的Widget,可以实现用户界面 & 交互。原创 2023-03-09 14:41:06 · 176 阅读 · 0 评论 -
一文认知并发安全的几种解决方案与性能对比
优化完成之后我们可以看到并发锁的效率 synchronized(线程同步锁) > AtomicInteger(原子操作) >SingleThreadExecutor(单线程) > ReentrantLock(可重入锁) > Semaphore(协程信号量限制) > Mutex(协程互斥锁)> actor通信并发同步模型有同学可能会说,都协程了还用 synchronized?喽不喽啊。。。好吧,其实谷歌自己都用,Flow是运行在协程上的,Flow的源码中几乎都是用 synchronized 来加锁的。原创 2023-03-08 16:20:04 · 562 阅读 · 0 评论 -
Android Vsync原理简析
我们看到,在第一帧里面,GPU墨迹了半天没搞完,以至于在第二帧里面,Display(屏幕)显示的还是第一帧的A数据,此时就产生了Jank(卡顿),并且在一个vsync信号过来后,cpu什么都没做,因为gpu占着后缓冲(那个绿色的长B块),所以cpu只能再等下一个vsync,在下一个vsync里面,cpu终于拿到了后缓冲的使用权,但是cpu计算时间比较长,导致了gpu时间不够用,数据又没算完,再次发生了卡顿,可以说,这次卡顿直接受到了第一次卡顿的影响,,所以,控制数据是否交换应该由屏幕来决定,但是!原创 2023-03-08 15:23:50 · 943 阅读 · 2 评论 -
从LiveData迁移到Kotlin的 Flow,才发现是真的香!
LiveData对于 Java 开发者、初学者或是一些简单场景而言仍是可行的解决方案。而对于一些其他的场景,更好的选择是使用Kotlin 数据流 (Kotlin Flow)。虽说数据流 (相较 LiveData) 有更陡峭的学习曲线,但由于它是 JetBrains 力挺的 Kotlin 语言的一部分,且 Jetpack Compose 正式版即将发布,故两者配合更能发挥出 Kotlin 数据流中响应式模型的潜力。此前一段时间,我们探讨了。原创 2023-03-07 20:11:29 · 944 阅读 · 1 评论 -
性能优化|记一次线上OOM问题处理
最近线上监控发现 OOM 涨幅较大,因此去尝试定位和修复这个问题,在修复了一些内存泄漏和大对象占用问题后, OOM 依旧未达到正常标准,在这些新上报的 hprof 文件中,发现几乎所有 case 中都有个叫 FinalizerReference 的对象,数量巨多,内存占用高居首位,因此判断它就是引起本次 OOM 上涨的罪魁祸首。现在开始看看 FinalizerReference 是个啥玩意,知己知彼,才能知道怎么去修它。原创 2023-03-05 21:27:29 · 1249 阅读 · 1 评论 -
Andorid:关于Binder几个面试问题
binder是一种进程间通讯的机制进程间通讯需要了解用户空间和内核空间每个进程拥有自己的独立虚拟机,系统为他们分配的地址空间都是互相隔离的。如两个进程需要进行通讯,则需要使用到内核空间做载体,内核空间是所有进程共享的一块内存区域。而用户空间切到内核空间需要使用到系统api ioctl进行通讯。原创 2023-03-05 20:37:42 · 554 阅读 · 0 评论 -
一文高端Android性能优化-总结篇
这时候只需要在ReferenceQueue中去查找是否存在该对象,如果没有就执行一个GC,再次查找,如果还是没有,则说明该对象可能无法被回收,也就可能发生了内存泄漏,最后使用HAHA这个开源库取分析dump之后的heap内存。这时候只需要在ReferenceQueue中去查找是否存在该对象,如果没有就执行一个GC,再次查找,如果还是没有,则说明该对象可能无法被回收,也就可能发生了内存泄漏,最后使用HAHA这个开源库取分析dump之后的heap内存。虚引用的目的是为了追踪一个对象被回收的时机。原创 2023-02-22 19:47:35 · 1433 阅读 · 0 评论