暂时未有相关云产品技术能力~
移动端领域 Bug 贡献者
来讨论下 Android 面试该问什么类型的题目?
Android 弹幕的两种实现及性能对比 | 自定义 LayoutManager
Android 弹幕的两种实现及性能对比 | 自定义控件
Kotlin 异步 | Flow 限流的应用场景及原理
Kotlin 异步 | Flow 应用场景及原理
Kotlin 协程 | CoroutineContext 为什么要设计成 indexed set?(一)
Kotlin 源码 | 降低代码复杂度的法宝
Android 音频(一) | 采样量化编码 & AudioRecord 录制音频
Kotlin 基础 | 望文生义的 Kotlin 集合操作
读源码长知识 | 原来可以这样扩大 View 点击区域
RecyclerView 刷新列表数据的 notifyDataSetChanged() 为什么是昂贵的?
Kotlin 基础 | 拒绝语法噪音
RecyclerView 的滚动时怎么实现的?(二)| Fling
RecyclerView 的滚动是怎么实现的?(一)| 解锁阅读源码新姿势
RecyclerView 性能优化 | 把加载表项耗时减半 (三)
RecyclerView 性能优化 | 把加载表项耗时减半 (三)
Kotlin 基础 | 委托及其应用
RecyclerView 性能优化 | 是什么在破坏缓存机制?
RecyclerView 性能优化 | 把加载表项耗时减半 (二)
RecyclerView 性能优化 | 把加载表项耗时减半 (一)
RecyclerView 面试题 | 哪些情况下表项会被回收到缓存池?
Kotlin 进阶 | 不变型、协变、逆变
RecyclerView 面试题 | 滚动时表项是如何被填充或回收的?
RecyclerView 动画原理 | 如何存储并应用动画属性值?
RecyclerView 动画原理 | pre-layout,post-layout 与 scrap 缓存的关系
RecyclerView 动画原理 | 换个姿势看源码(pre-layout)
讲述一个代码随需求而变的过程,曾一度因为既有代码不能满足新的需求而卡壳。在阅读了 Android 源码后茅塞顿开,立马一顿重构。但重构完成之后,我陷入了沉思。。。。 新的需求是渐变色的进度条。只需在绘
如何让列表加载分页数据过程无感知。一种实现方案是预加载,即在一页数据还未看完时就请求下一页数据。这一篇介绍一个超简单的预加载实现方案。
每次数据变化都全量刷新整个列表是很奢侈的,不仅整个列表会闪烁一下,而且所有可见表项都会重新绑定一遍数据。这一篇对 DiffUtil 进行二次封装以让其更易于使用。
上篇介绍了一种新的监听 RecyclerView 表项点击事件的方法。实现了将点击事件和RecyclerView.Adapter解耦。这一篇介绍如何监听 RecyclerView 表项子控件点击事件。
App 界面愈发复杂,元素越来越多,将不同类型的元素组织成 RecyclerView 就可以超越屏幕的限制。常用的RecyclerView在使用时有诸多痛点。这一篇尝试让扩展列表数据类型变得简单。
项目中的各种描述形状的 xml 文件多如牛毛。虽然 xml 提供了可视化效果,但不能复用,读取耗时也是它的缺点。用 Kotlin 语法糖包装一下就可以和 xml 说再见。
掉帧是因为生产帧速度跟不上消费帧速度。Choreographer 用于同步生产和消费帧的速度。以读源码方式还原掉帧时软件层面发生的事情。
一年前,用 Java 写了一个高可扩展选择按钮库。只用单个控件实现单选、多选、菜单选,且选择模式可动态扩展。 一年后,试着用 Kotlin 重写该控件。
实现夜间模式有很多种方式,经过多次尝试,算是找到了一种性价比较高的方式。 这是最正统的方式,但工作量巨大,因为要全局替换 xml 布局中所有硬编码的色值,将其换成主题色。然后通过换主题达到换肤的效果。
刚踏入计算机行业那一年,单纯的我觉得“只要技术足够牛,就能使项目成功 。”但随着时间这把剃头刀不断地推高发际线,越发察觉到有一股技术以外的力量起着更大的作用。这也促使我跳出“写代码”边界,思考代码以外
在阅读viewModelScope源码时,发现了一种新的方式。 协程需隶属于某 CoroutineScope ,以实现structured-concurrency,而 CoroutineScope 应
本文以一个真实项目的业务场景为载体,描述了经历一次次重构后,代码变得越来越复杂(you ya)的过程。
上一篇讲述了 Activity 构建布局的过程,及测量其耗时的方法。这一篇在此基础上给出优化构建布局的方案。
上一篇讲述了 Activity 构建布局的过程,及测量其耗时的方法。这一篇在此基础上给出优化构建布局的方案。
xml 布局文件是如何变成 View 并填入 View 树的?带着这个问题,阅读源码,居然发现了一个优化布局构建时间的方案。
上一篇通过在父控件绘制前景的方式展示小红点,在布局文件中配置标记控件就能为任意子控件添加小红点。实现方案是”布局文件中配置带小红点控件 id,在父控件中获取它们的坐标,并在其右上角绘制圆圈“。但这个方
设计模式中的单例模式在多进程场景下会演变成多例,存在线程安全问题。本文通过跨进程通信机制让多进程共享单例。
上篇介绍了两种实现小红点的方案,分别是多控件叠加和单控件绘制,其中第二个方案有一个缺点:类型绑定。导致它无法被不同类型控件所复用。这篇给出一种新的方案。
小红点用于通知未读消息,在应用中到处可见。本文将介绍三种实现方案。分别是:多控件方案、单控件绘制方案、容器控件绘制方案。不知道你会更偏向哪种方案?
当你浏览公众号时来了一条新消息,通知在屏幕顶部会以自顶向下动画的形式入场,而且它是跨界面的全局浮窗(效果如下图)。虽然上一篇中抽象的浮窗工具类已经能实现这个需求。但本文在此基础上再封装一些更加友好的
本文以业务应用为出发点,从零开始抽象一个浮窗工具类,它用于在任意业务界面上展示悬浮窗。它可以同时管理多个浮窗,而且浮窗可以响应触摸事件,可拖拽,有贴边动画。
回想一下在作文本上写作的场景,当从左到右写满一行后,会切换到下一行的开头继续写。如果把“作文本”比作容器控件,把“字”比作子控件。Android 原生控件中没有能“自动换行”的容器控件。
吴宇森导演大家一点不陌生,听了他的故事后,我对 delay 的理解更深刻了。 吴宇森,中国香港导演、编剧、监制、演员。1986年执导的枪战片《英雄本色》奠定其暴力美学的电影风格,并获得第6届香港电影金
你一定在内心吐槽过他的代码太烂:没注释、逻辑混乱、到处都是 magic number、实现方案过时、耦合严重、一改就出 bug。 此时心中的怒火油然而生,仿佛自己是正义的化身。。。