自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 【Jetpack-Navigation】想去哪就去哪,Android世界的指南针

前言androidx Navigation 组件是 Android 中应用内导航的官方库很多人不喜欢 Navigation 因为其设计不符合开发者的预期,它在管理「平级界面」时来回切换会导致平级的 fragment 重建。网上针对这一问题有一个 重写 Navigator 的方案,大多数人会简单地认为 Navigation 无法保存 fragment 状态是因为使用了 replace(曾经的我也这样认为)本文的内容为 Navigation 的职能边界,简单使用,高阶使用技巧(例如同一 activity.

2021-12-31 17:03:46 1853 2

原创 【Android面试储备】Activity知识点全家桶;看完这篇你还不会,请给我寄刀片

这篇文章将解决你以下几个疑问:Activity的生命周期在不同场景有何种不同提现?Activity启动模式有哪些?有何不同?Activity是如何处理数据的?Activity和Context有什么关系?Android中有哪些进程?一、生命周期1.1 Dialog 弹出时如果是单纯是创建的 dialog ,Activity 并不会执行生命周期的方法但是如果是跳转到一个不是全屏的 Activity 的话, 当然就是按照正常的生命周期来执行了即 onPasue()

2021-12-26 15:11:22 678

原创 Android Framework | 消息机制的冷门知识点,你能答出来几个?

作为Android的基础知识,消息机制已被无数人写过。笔者曾经也写过一篇深入分析的文章,但总体而言乏善可陈,并无新颖之处。最近恰好重新整理了一下思路,想着可以从细节的角度出发,对一些冷门的知识点做一个归纳。记录于此,供大家批评讨论。本文所有代码基于Android Q (10.0)1. 哪个消息在前?哪个消息在后?假设线程1此时正在处理一个消息,线程2通过如下方式(方式Ⅰ)往线程1的消息队列中插入两个消息。请问消息A和消息B哪个先被处理呢?handler.sendMessage(msgA);han.

2021-12-21 17:22:14 1468

原创 【译】Kotlin 协程,JVM 线程以及并发问题

原文:Bridging the gap between coroutines, JVM threads, and concurrency problems作者:Manuel Vivo译者:Flywith24「协程是轻量级的线程」,是不是经常听到这样的描述?这个描述对你理解协程有实质性的帮助吗?可能没有。阅读本文,您会对 协程在 JVM 中实际的执行方式,协程与线程的关系以及使用 JVM 线程模型时不可避免的 并发问题 有更多的了解。协程与 JVM 线程协程旨在简化执行异步操作的代码。基于 JV.

2021-12-20 10:12:35 568 1

原创 Android模仿微博的LazyFragment懒加载

本文会从头开始一步一步带你去写一个LazyFragment,根据写的过程中一步一步记录,你也可以自己试一试,跟着一起写写。最后也根据遇到的问题去完善了,网上搜的都是不完善的,还是自己写一个吧!懒加载是在加载啥?这个问题显得很愚蠢。但是想一下,懒加载到底是加载数据和视图,还是数据呢??(一开始我也想过这个问题。。。)当然是数据啦,你怎么能阻止视图的加载呢!你是无法阻止Fragment的生命周期函数的执行的,所以只能让当前显示的Fragment加载数据,不显示不加载数据怎么能知道当前页面是显示的这个Fra

2021-12-17 10:32:57 212

原创 Android Runtime | Trace文件的生成机制

本文分析基于Android S(12)当App发生ANR或是System触发watchdog时,系统都希望生成一份trace文件,用来记录各个线程的调用栈信息,以及一些进程/线程的状态信息。这份文件通常存放在/data/anr目录下,APP开发者拿不到。不过从Android R(11)开始,App便可以通过AMS的getHistoricalProcessExitReasons接口读取该文件的详细信息。以下是一份典型trace文件中的内容。----- pid 8331 at 2021-11-26 09:1

2021-12-16 14:21:08 3541

原创 20min、15张图带你吃透Diff算法核心原理

前言在日常面试中,Diff算法都是绕不过去的一道坎,用最通俗的话,讲最难的知识点一直是我写文章的宗旨,今天我就用通俗的方式来讲解一下Diff算法吧?Lets Go什么是虚拟DOM讲Diff算法前,我先给大家讲一讲什么是虚拟DOM吧。这有利于后面大家对Diff算法的理解加深。虚拟DOM是一个对象,一个什么样的对象呢?一个用来表示真实DOM的对象,要记住这句话。我举个例子,请看以下真实DOM:<ul id="list"> <li class="item">哈哈<

2021-12-15 14:24:46 343

原创 不做跟风党,LiveData,StateFlow,SharedFlow 使用场景对比

作者Flywith24Android 常用的分层架构Android 中加载 UI 数据不是一件轻松的事,开发者经常需要处理各种边界情况。如各种生命周期和因为「配置更改」导致的 Activity 的销毁与重建。「配置更改」的场景有很多:屏幕旋转,切换至多窗口模式,调整窗口大小,浅色模式与暗黑模式的切换,更改默认语言,更改字体大小等等因此普遍处理方式是使用分层的架构。这样开发者就可以编写独立于 UI 的代码,而无需过多考虑生命周期,配置更改等场景。 例如,我们可以在表现层(Presentatio.

2021-12-14 16:52:36 3754 1

原创 Android中布局层级过深为什么会对性能有影响?为什么 Compose 没有布局嵌套问题?

前言做过布局性能优化的同学都知道,为了优化界面加载速度,要尽可能的减少布局的层级。这主要是因为布局层级的增加,可能会导致测量时间呈指数级增长。而Compose却没有这个问题,它从根本上解决了布局层级对布局性能的影响: Compose界面只允许一次测量。这意味着随着布局层级的加深,测量时间也只是线性增长的.下面我们就一起来看看Compose到底是怎么只测量一次就把活给干了的,本文主要包括以下内容:布局层级过深为什么影响性能?Compose为什么没有布局嵌套问题?Compose测量过程源码分析.

2021-12-13 15:52:05 986

原创 Androd 性能优化之布局优化

Android的布局管理器本身就是个UI组件,所有的布局管理器都是ViewGroup的子类,而ViewGroup是View的子类,所以布局管理器可以当成普通的UI组件使用,也可以作为容器类使用,可以调用多个重载addView()向布局管理器中添加组件,并且布局管理器可以互相嵌套,当然不推荐过多的嵌套 (兼容低端机型,最好不要超过5层)。布局层级管理让咱们一起了解一下每当系统绘制一个布局时,都会发生一些什么。这一过程由两个步骤完成:绘制(Measurement)1:根布局测量自身。2:根布

2021-12-12 16:43:23 225

原创 Android启动那些事儿,从头到尾拎一遍~

前言作为一个应用工程师,除了写一些业务代码,性能优化也是我们需要关注的点!如果想要去做启动优化,那么去了解启动过程就是一个绕不过去的坎儿。那么除了关于启动过程的那些代码,我们还应该去知道什么呢?一、多进程那些事儿在大家很早学习 Android 的时候,想必就知道,每一个 Android App 就代表着一个进程。1. 为什么要开启进程?为什么要开启一个新的进程呢?在 Linux 中,线程和进程可没多大区别,内核并没有给线程准备特别的调度算法或者特殊的数据结构,相反,线程被视为一个与其他进程

2021-12-09 17:25:19 1824

原创 你确定你的Glide不会发生内存泄漏吗?

最近正在阅读Glide源码,今天我们要研究的部分是Glide RequestManager 生命周期管理。 本来这个也是这篇文章应该是Glide生命周期管理。但是在源码阅读中我发现原来我以前的项目对于Glide的使用存在着一些内存泄漏的可能,因此临时决定更改了文章的名字,希望能够引起大家的重视。这个是我们的主界面样式通过最下面的一排选项卡,控制主界面的一级fragment ,一级Fragment下面又有若干的子Fragment,fragment又包含一些其它的View。以RecyclerView举例,

2021-12-07 16:57:19 1512

原创 Jetpack Navigation 真香预警

1. Navigation到底该如何正确的使用相信大家对 Navigation都有所耳闻,我不细说怎么用了,官方的讲解也很详细。我是想说一下到底该如何更好的使用这个组件。这个组件其实是需要配合官方的MVVM架构使用的,ViewModel+LiveData结合才能更好的展现出Navigation的优势。在官方的讲解示例中没有用到ViewModel和LiveData,官方只是演示了Navigation怎么用怎么在页面之间传值,和这个组件的一些特性之类的。但真正用好还是要结合ViewModel和LiveD.

2021-12-03 16:14:18 1900

原创 MotionLayout的高级玩法

前言最近写业务的时候遇到一个带有轮播的界面在交互效果还定稿的时候,大佬同事建议轮播样式可以考虑 MotionLayout 中的 Carousel, 这个组件就是为轮播而生。学习完发现 MotionLayout 确实好用,用同事的话来说,就是让世界没有难做的动画。MotionLayout 的思路非常简单,使用 ConstraintLayout 的写法,定义动画开始的一帧和动画结束的一帧(当然我们也可以加入更多帧,在动画的过程中),在事件触发以后,会自动帮我们处理好动画。不过,本文的重点可不是学习

2021-12-02 15:25:24 2214 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除