排序
图解 Binder:线程池
这是一系列的 Binder 文章,会从内核层到 Framework 层,再到 Java 层,深入浅出,介绍整个 Binder 的设计。详见《图解 Binder:概述》。 本文基于 Android platform 分支 android-13.0.0_r1 和...
用CpFastAccessibility轻松实现 → 某电商618"拆快递"自动化
又是一年618,电商平台又是常规的 价格歧视 策略:蹲点抢券、各种凑单、签到、关注店铺、加购商品、看直播等。满打满算,可能最终付款的价格比618前还贵,2333,毕竟都是 活动前先涨价。 比如,...
在 Compose 中实现缓存列表数据提升用户体验(Stale-while-revalidate)
前言 最近在利用业余时间使用 Compose 实现一个 Github APP 客户端。 对标的是 GSY 大佬使用多种不同语言框架实现的 Github APP。 在实现过程中发现一些问题,因为这个客户端的数据几乎全部来自...
Gson与Kotlin的老生常谈的空安全问题
问题出现 偶然在一次debug中发现了一个按常理不该出现的NPE,用以下简化示例为例: Exception in thread 'main' java.lang.NullPointerException: Cannot invoke 'kotlin.Lazy.getValue()' beca...
Android 切换主题时如何恢复 Dialog?
我们都知道,Android 在横竖屏切换、主题切换、语言等操作时,系统会 finish Activity ,然后重建,这样便可以重新加载配置变更后的资源。 如果你只有 Activity 的内容需要展示,那这样处理是没...
OpenGL4-使用顶点缓冲区绘制三角形
01、缓冲区与顶点属性: 之前我们实现了,在屏幕中心上绘制了一个点,而且这个点是固定值不能修改的,现在我们想一次绘制多个点,应该怎么做呢?需要使用顶点缓冲区进行数据传递 OpenGL中想要绘...
【开源库剖析】Shadow v2.3.0 源码解析
一、框架介绍 Shadow是19年腾讯开源的自研Android插件化框架,经过线上亿级用户量检验。 Shadow不仅开源分享了插件技术的关键代码,还完整的分享了上线部署所需要的所有设计。 项目地址:github...
Android面试经:Broadcast需要注意哪些细节
前言 在android中,广播也是我们经常使用的组件,但是因为大部分使用场景简单,所以关注不多,今天就让我们来探索一下Broadcast。 注册 这个是常识了,两种注册方式:静态注册(menifast)和动...
Compose 中的附带效应
附带效应是指发生在可组合函数作用域之外的应用状态的变化。由于可组合项的生命周期和属性(例如不可预测的重组、以不同顺序执行可组合项的重组或可以舍弃的重组),可组合项在理想情况下应该是...
对嘛!这才是从网络加载点9图的正确姿势!
“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第3篇文章,点击查看活动详情” 你拿手机刷着刷着,突然手滑点开一张图, 这图向上无限高,向下无限深,向左无限远,向右无限远, 这图是什...
从Kotlin中return@forEach了个寂寞
今天在Review(copy)同事代码的时候,发现了一个问题,想到很久之前,自己也遇到过这个问题,那么就来看下吧。首先,我们抽取最小复现代码。 (1..7).forEach { if (it == 3) { return@forEach ...
OpenGL ES教程——帧缓冲
在OpenGL的渲染管线中,几何数据和纹理通过一系列变换和测试,最终被渲染成屏幕上的二维像素。那些用于存储颜色值和测试结果的二维数组的几何被称为帧缓冲区(frame buffer) 用于写入颜色值的...
Flutter 红包动画效果
前言 红包动画效果实现,如图: 该效果的实现难道其实比较简单,就是基础的平移、旋转和缩放动画,但比较麻烦的就是需要写很多小动画组合,共由11个小动画组合而成。 动画拆解 红包显示动画 红包...
现代化 Android 开发:组件化与模块化的抉择
本文为现代化 Android 开发系列文章第四篇。 完整目录为: 现代化 Android 开发:基础架构 现代化 Android 开发:数据类 现代化 Android 开发:逻辑层 现代化 Android 开发:组件化与模块化的抉...
mvvm在android上的实践
首先我们来回顾一下MVVM的架构模式: MVVM(Model-View-ViewModel)是一种软件架构模式,用于设计和组织用户界面(UI)驱动的应用程序。它由三个主要组件组成: Model(模型):负责表示应用程...
Kotlin中inline、noinline和corssinline到底是什么?
本文基于Kotlin 1.7.0版本,目前Kotlin最新版本为1.8.22 相信大家在日常使用Kotlin的过程中,已经接触了很多inline函数,包括源码中也有很多很多方法使用了inline来修改某些方法,不知道是不是...
jetpack 状态保存恢复初探索
1. UI 状态保存 View class ChatBubbleView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : View(context, attrs, defStyleAttr) { pr...
【Flutter】事件分发机制
我正在参加「掘金·启航计划」 缘起GestureBinding 1-onPointerDataPacket指针数据接收 flutter/packages/flutter/lib/src/gestures/binding.dart:GestureBinding @override void init...
Android那两个你碰不到但是很重要的类之ActivityThread
Android那两个你碰不到但是很重要的类之ActivityThread 前言 上篇文章我们聊了些Android里那些我们平时碰不到但很重要的类ViewRootImpl,这一篇我们就来看看另外那个类ActivityThread。 通过本...
开发一款游戏App上线Googleplay(花了2个月业余时间)
欢迎关 Android茶话会 回 pdf 取阿里&字节经典面试题、Android、算法、Java等系列武功秘籍 在技术学习、个人成长的道路上,让我们一起前进! 背景 作为一个Android开发还是希望能上线一...