自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

trebleZ的博客

比你努力一点点的人,其实已经甩你很远了。

  • 博客(233)
  • 资源 (36)
  • 收藏
  • 关注

原创 RK3588 板卡GPIO口调试实现简单按键触发-JNI

项目要把一个回弹按钮接到开发板上:按一次,发起一次紧急视频通话。最初松开按钮时首页的 `0/1` 不断跳变;换引脚、改成边沿监听后能触发,但还需要处理抖动、页面切换和外部进程依赖。

2026-11-07 17:29:48 253

原创 AI Agent 常见名词:英文怎么读、怎么写,概念怎么理解

你把一段 Android 崩溃日志交给 AI,让它“查一下文档,找到原因,再给出修复方案”。界面上陆续出现 `Planning`、`Tool call`、`Context`、`MCP`、`Memory`。这些词看起来都和“AI 在干活”有关,但分别指什么?为什么接上 MCP 后,它仍可能找错资料?为什么保存了聊天记录,它还会忘记前面说过的话?

2026-11-06 10:31:37 299

原创 RK3588 板卡GPIO口调试实现简单按键触发

本文分析了基于RK3588开发板的按钮输入问题,涵盖从硬件接线、GPIO配置到Android层事件处理的完整链路。关键点包括:使用上拉电阻确保引脚稳定电平;通过gpiomon读取边沿事件并转为Kotlin Flow;引入状态机防抖,区分真实按动与抖动;最终由通话管理器统一协调音视频资源。强调跨层协作的重要性,避免将系统异常归因于单一环节。

2026-11-04 14:45:59 315

原创 Android 中的 MQTT 协议:从设备状态推送到可靠消息处理

做一个智能家居 App:用户打开设备详情页,希望马上看到灯是开着还是关着;点下开关后,灯的状态又要及时更新。用 HTTP 定时查询可以实现,但页面上没有变化时,很多请求只是重复读取相同的数据。MQTT 很适合这种持续接收小消息的场景。接入后,真正让人困惑的通常是另一组问题:消息为什么重复了?网络恢复后怎么收不到数据?手机息屏之后,为什么连接也跟着断了?

2026-11-02 19:18:44 284

原创 Android 核心名词手册跟读版

本文整理Android面试高频核心名词,涵盖Java/Kotlin/Dart、JVM、并发、性能优化、架构等方向,提供音标、释义及面试要点,助力精准表达、高效复习。

2026-11-02 18:08:01 132

原创 Android 串口通信:从 /dev/ttyS1到协议帧

在RK3588板卡上运行血压计Demo时,虽发送“开始测量”命令(FF C0 03 A3 A0)成功且气泵启动,但界面未更新气压。问题根源在于:串口通信需确保接收线程收到完整且校验通过的协议帧,而非仅发送成功。应用通过/dev/ttyS1读写串口,依赖stty配置波特率、数据格式及min 1 time 0避免空读退出。原始字节必须经ProtocolParser解析为有效帧(如FF C0 05 A8 A0 00 03),方可触发UI更新。故障排查应优先验证接收到的原始字节是否构成有效帧,再逐层检查硬件连接、电

2026-10-29 16:57:11 328

原创 Android 版本号、API Level 和 JDK 版本有什么关系?

在 Android Studio 里看到 `minSdk = 23`,测试同事说手上的设备是 Android 13,构建日志又提示需要 JDK 17:这几个数字之间到底怎么换算?这台设备能安装应用吗?

2026-10-28 13:58:44 285

原创 从开机到首帧:Android 系统与应用启动流程源码分析

手机开机后,系统从Bootloader、内核启动init,由其加载zygote与servicemanager,Zygote预加载类并孵化system_server。后者启动AMS、WMS等核心服务,最终由Launcher显示桌面。点击应用图标时,系统通过AMS决策进程与Activity,Zygote创建新应用进程,执行Application.onCreate(),直至首帧渲染完成。整个流程分为“开机启动”与“冷启动”两阶段,在Launcher处衔接,共同实现应用的首次运行。

2026-10-27 14:27:45 202

原创 Flutter 与原生交互的最后一层:RTC 视频帧怎么走

做一个 Flutter 视频通话页,点击“切摄像头”很快,画面却偶尔掉帧;把 RTC 回调里的每帧图像发给 Dart 后,卡顿更明显。于是很容易得出一个结论:“Flutter 和原生之间的桥太慢。”这个判断只说对了一半。要先看清楚,到底是什么东西在过桥。

2026-10-26 13:06:14 217

原创 Flutter 状态管理怎么选:几种框架的区别,以及大厂公开案例能说明什么

购物车角标要在商品页、订单页同时更新,用户切换账号后又必须清空。再加上接口请求,旧账号的响应可能在新账号登录后才返回。这篇文章写于 2026 年 10 月。文中的购物车是一个统一的选型场景:列表页显示数量,结算页向服务端请求报价,登出时清空当前用户的数据。它用来比较方案的行为,不是某个真实项目的事故复盘。后半部分再看企业公开资料。尤其是“大厂都用哪个”这个问题:公开案例能证明一个团队在某个时期的做法,通常无法证明整家公司今天的全部代码库都采用同一方案。

2026-10-25 07:00:00 707

原创 从零搭建一套 Flutter 架构:先跑通数据流

接手新 Flutter 项目时,应先明确数据真实来源、生命周期、错误处理与入口路径。以“加入购物车”为例,通过单向数据流设计:页面仅负责展示与事件触发,由 Repository 统一管理购物车状态,ViewModel 转换为 UI 状态,实现单一真实来源。按功能聚合目录,优先完成垂直切片——从网络请求到页面渲染的完整链路,再逐步引入依赖注入、缓存与异常处理。架构核心是职责清晰、可测试、易维护,而非堆砌框架。

2026-10-24 17:11:29 527

原创 Flutter 底层渲染引擎怎么变了:从 Skia 到 Impeller,以及迁移时的坑

Flutter 3.47 起,移动端默认启用 Impeller 渲染后端,取代 Skia 运行时编译着色器的模式,旨在消除首帧卡顿。其核心变化在于将着色器预编译、管线状态管理前置,降低渲染波动。但布局与业务逻辑不变,图片、相机、地图、自定义绘制等仍需针对性优化。各平台支持不一:iOS 全面启用,Android 高版本默认开启,旧设备回退至 OpenGL;Web 仍用 Skia。开发者需警惕“卡顿即着色器问题”的误区,重视真机 Profile 与跨后端视觉差异,避免依赖关闭 Impeller 作为长期解决方案

2026-10-23 18:07:06 222

原创 Android 性能排查实战:怎么看内存抖动、CPU 占用和 FPS

本文聚焦Android应用性能卡顿排查,强调应先通过可复现操作建立时间线,再结合System Trace、Memory Profiler与CPU采样,精准定位卡顿根源。重点指出:内存抖动需看分配速率而非总量,CPU占用要分线程分析热点,帧耗时应关注“掉帧”而非平均FPS。以列表滑动为例,通过追踪分配调用栈与GC时机,发现onBindViewHolder中频繁创建对象是主因,建议优化字符串处理与图片解码逻辑。核心方法论:锁定卡顿时段 → 对齐内存/线程/帧耗时 → 沿最先变化信号追溯调用栈。

2026-10-23 17:27:51 386

原创 Android 开发必备:用 Chucker 看清网络请求,并把排查时间缩短

登录页报“网络异常”,服务端说接口没收到请求。你翻 Logcat,只看到一条 `HttpException`;测试同学手里的手机又没有连 Android Studio。这时候,与其猜请求有没有发出去,不如直接在 App 里看:请求方法、URL、请求头、请求体、响应码、响应体和耗时分别是什么。

2026-10-22 17:31:00 391

原创 Android 屏幕适配的前世今生

本文解析Android屏幕适配核心机制:分辨率决定物理像素数,逻辑密度(densityDpi)将dp转换为px,而图片内存占用取决于解码后像素尺寸与格式。同一张300×200 PNG放入drawable-mdpi目录时,系统按设备密度自动缩放——在3倍密度设备上解码为900×600,内存达前者的9倍。关键在于:内存由解码尺寸决定,非分辨率或文件大小。理解密度缩放、资源目录规则及Bitmap解码机制,是避免内存溢出、实现高效适配的核心。

2026-10-21 17:06:48 355

原创 kotlin coroutines理解:为什么需要协程,和线程有什么不同

Kotlin 编译器把 `suspend` 函数中的挂起点编成状态机。生成的 `Continuation` 保存状态编号和跨挂起点仍需使用的局部变量。调用挂起函数时,它可能立刻返回结果;如果确实要等,就保存续体并返回 `COROUTINE_SUSPENDED`。等定时器、网络回调或其他事件给出结果,续体再通过调度器恢复,从挂起点后继续执行。这里释放的是线程的执行机会,不是把整条线程“暂停保存”。这是根据 [Kotlin 语言规范](https://kotlinlang.org/spec/asynchrono

2026-10-20 08:51:44 359

原创 Kotlin 类、状态与泛型:一条订单页面的数据边界

本文以 Kotlin 2.4.21 为例,阐述订单页面状态管理的类型设计原则:通过接口与类划分数据源职责,用密封接口限定状态分支,借助显式幕后字段实现读写分离,结合泛型协变(out/in)精确控制数据流向。核心在于将“谁创建、谁修改、谁只读”等约定转化为类型约束,避免依赖运行时约定防错,提升代码可维护性与测试性。

2026-10-17 17:46:36 222

原创 Kotlin学习导航:从知识树走到项目与面试

本文以 Kotlin 2.4.21 为基线,围绕 Android 开发中的核心痛点,系统梳理“数据边界 → 行为与状态 → 平台边界 → 并发与交付”四层架构。八篇内容依次覆盖类型安全、函数建模、状态设计、JVM 互操作、控制流、集合转换、协程并发与工程实践,每篇聚焦一个可独立查阅的问题,帮助开发者从接口空值、列表转换到协程泄漏等实际场景中精准定位并解决难题,提升代码健壮性与可维护性。

2026-10-17 17:45:52 812

原创 Kotlin 工程实践与生态:代码写完后还要验证什么

本文强调,Kotlin 项目可靠交付需整合测试、性能测量、生命周期管理与跨平台兼容性。通过精准单元测试与性能基准,确保逻辑正确与效率;合理使用 ViewModel 与 collectAsStateWithLifecycle 管理状态;在 KMP 中共享规则而非平台细节;发布前验证二进制兼容性与消费者环境。语言版本仅作示例,核心在于构建可复现、可验证的全链路工程体系。

2026-10-17 17:03:38 205

原创 Kotlin 异步与并发:从一次搜索请求走到状态流

本文以 Kotlin 2.4.21 为例,系统阐述 Android 协程在搜索场景中的正确使用:通过 viewModelScope 管理任务归属,用 Job 取消旧请求防止结果覆盖;利用 Flow 表达持续变化的数据流,结合 stateIn 共享状态并控制生命周期;并发请求采用 async 与 coroutineScope 实现重叠执行;共享状态则通过 Mutex 保证线程安全。强调取消、作用域、结果传递与并发控制需协同设计,避免仅依赖 suspend 或调度器。

2026-10-17 17:02:54 390

原创 Kotlin 集合与序列:给页面一份清楚的数据

Android 消息页从仓库取回通知列表,准备筛出未读项并按会话显示。代码里参数类型写着 `List`,页面却可能在下一次刷新前看到内容变化;图片接口要的是 `ByteArray`,手上的 `List<Byte>` 又不能直接传。问题牵涉的并非一套“集合语法”,而是数据能否被修改、怎样组织、何时计算。以下以 Kotlin 2.4.21 及 Android 的 JVM 目标为基线。

2026-10-17 17:01:57 144

原创 Kotlin 控制流:从页面状态到循环出口

Android 页面拿到一批待展示记录,既要根据加载状态显示文案,又要跳过无效记录;用户取消时,扫描还得马上结束。把这些判断都写成层层嵌套的 `if`,代码很快会分不清“算出一个值”和“改变执行路线”。本文以 Kotlin 2.4.21 为基线,沿这条页面处理过程看表达式、循环和跳转各负责什么。

2026-10-17 17:01:02 247

原创 Kotlin 类型与空安全:从接口数据到页面状态

Android 页面从 `Intent` 读取商品 ID,再把接口返回的价格和标题显示出来:ID 可能缺失,价格单位可能是“分”,标题可能来自没有可空标注的 Java SDK。把这些值都交给类型推断,编译器也无法替业务判断“缺失”和“无效”是否一样。

2026-10-16 18:04:53 291

原创 Kotlin 变量与函数:把页面状态和行为写成清楚的契约

一个 Android 商品页需要展示价格、处理点击、把埋点发给日志服务。写起来全是 `val`、`var`、`fun` 和花括号,难点却在于:谁可以改状态,谁决定筛选规则,回调被谁持有,以及日志依赖从哪里来。**用变量声明约束重新赋值,用函数签名交代输入与结果,再让 Lambda 和扩展只承担清晰、局部的便利。**

2026-10-16 18:03:52 264

原创 WebView JSBridge 全解析:Android 与 H5 怎么通信,为什么还要走向跨端

从 WebView 与 JavaScript 的双向消息通道讲起,比较 addJavascriptInterface、evaluateJavascript 与 WebMessage,梳理安全、可靠性、性能和多端维护问题,并说明它们如何推动跨端架构演进。

2026-10-15 23:28:52 159

原创 Kotlin 与 JVM 互操作:从 Java 调用签名查到旧 AAR

Android 项目把一个工具类从 Java 改写成 Kotlin,Kotlin 模块能正常调用,Java 模块却找不到静态方法;另一次升级只改了库的编译选项,旧 AAR 消费方运行时又报方法错误。这些现象都需要同时看源码契约和 JVM 产物。

2026-10-15 18:04:27 439

原创 HTTP 请求是怎么走的:从 Android 页面到服务端响应

在 Android 页面里调用一次接口,日志只留下 `GET /articles/42` 和 `200`。页面第二次打开却更快,抓包偶尔出现 `304`;换成弱网后,请求可能连状态码都没有。它们是同一条请求链上的不同结果,光记“HTTP 是超文本传输协议”解释不了

2026-10-14 17:17:55 291

原创 Kotlin 变量与函数:把页面状态和行为写成清楚的契约

一个 Android 商品页需要展示价格、处理点击、把埋点发给日志服务。写起来全是 `val`、`var`、`fun` 和花括号,难点却在于:谁可以改状态,谁决定筛选规则,回调被谁持有,以及日志依赖从哪里来。**用变量声明约束重新赋值,用函数签名交代输入与结果,再让 Lambda 和扩展只承担清晰、局部的便利。

2026-10-13 18:53:42 218

原创 Android 中的 Socket 和 WebSocket:从一条聊天消息看清区别

在 Android 聊天页里,点“发送”后服务器要马上回一条消息。有人会说“用 Socket”,也有人会说“用 WebSocket”。两者都能保持连接、双向传消息,名字又很像,选型时很容易把它们当成同一层的东西。

2026-10-13 18:42:50 302

原创 聊天与引用回复的 SQL 怎么设计

做聊天功能时,最容易先想到一张表:`id、发送人、接收人、内容、时间`。它足以演示两个人互发消息,却很快会遇到几个问题:群聊怎么表示?一条消息回复的是哪条?消息重复发送怎么办?翻历史消息为什么越翻越慢?已读和未读又存在哪里?

2026-10-12 21:56:07 230

原创 什么是 Android Clean Architecture

一个订单页面需要请求商品价格、计算满量折扣,再显示总价。最直接的写法,是在 `Activity` 或 `ViewModel` 里调用 Retrofit,拿到 DTO 后顺手计算折扣。功能能跑,但当接口字段改变、折扣规则增加、页面从 XML 换成 Compose 时,这段代码很可能一起被改动。

2026-10-12 21:37:09 313

原创 Android 没有没落,但开发者的边界正在改变:写给 AI 时代的自己

因为AI时代真正有价值的能力,越来越不是,我们会哪一个平台。而是面对一个陌生的问题,我们有没有能力快速理解它、拆解它,然后把它做出来。这或许是我说了这么多想表达的,也许这才是2026之后我这种Android开发者最值得拥抱的变化吧

2026-10-11 20:44:47 472

原创 Android 依赖注入库到底应该怎么选

文章比较了 Hilt、Dagger、Koin、Kodein-DI、Toothpick 和手动 DI,包含工作原理、代码示例、生命周期作用域、适用场景与选型建议。核心结论是:新的原生 Android + Jetpack 项目通常优先考虑 Hilt;Koin 是常见的轻量替代,尤其适合偏好 Kotlin DSL 或需要跨平台共享的团队。

2026-10-11 20:05:29 377

原创 Android DataStore、SharedPreferences 与 MMKV

一个深色模式开关,SharedPreferences、DataStore、MMKV 都能存;但它们解决问题的方式并不相同。SharedPreferences(下文简称 SP)是 Android 平台自带的 XML 键值存储,DataStore 面向异步和响应式的数据更新,腾讯 MMKV 则以mmap为核心优化小型键值读写。这里把提问中的mkkv按MMKV理解。

2026-10-11 20:02:52 569

原创 知无不会:你到底应该怎么配置项目中的 .gitignore 文件?

打开 `voice-pipeline-demo`,`app/libs/AIKit.aar` 能在 Git 里看到,`app/build/outputs/apk/debug/app-debug.apk` 却看不到;根目录的 `local.properties` 明明存在,`git status` 也没有提示。只记住“编译产物要忽略”,解释不了这三个现象,更难解释一个常见事故:明明加了 `.gitignore`,密钥还是进了仓库

2026-10-10 15:02:18 223

原创 这一次你一定能看懂 Gradle 的配置文件了

刚接手一个 Android 项目,想加一个依赖。Android Studio 左边能看到 `manifests`、`java` 和 `res`,切到 Project视图,又出现 `settings.gradle.kts`、两份 `build.gradle.kts`、`libs.versions.toml`。这些文件看起来都在“配置项目”,到底该从哪里读?

2026-10-10 13:40:40 276

原创 Android 卡顿优化实战:测到哪一帧,再决定改哪段代码

首页列表滑动时偶尔“顿一下”:商品图片刚进入屏幕,手指还在移动,内容却短暂停住。把所有工作都扔到线程池,卡顿可能还在;因为问题也可能出在布局重算、图片上传到 GPU,或一段等待锁的时间

2026-10-09 17:38:25 247

原创 Android 崩溃优化与应用稳定性全解析:Crash、ANR、OOM 到线上治理

线上最难受的稳定性问题,往往不是“某个空指针崩了”这么简单。更真实的情况是:某个版本刚灰度,Crash 率往上跳,ANR 也跟着涨;用户评论里说“打开就闪退”“点一下没反应”“页面卡死”;你打开日志平台,Java 崩溃、Native 崩溃、OOM、主线程阻塞、启动失败混在一起,像一团线。

2026-10-09 17:26:09 389

原创 Android 视频压缩上传实战:从 content Uri、转码到断点续传

讲清 Android 视频选取、元数据读取、是否压缩的决策、Media3 Transformer 转码、流式上传、进度、取消、后台任务和服务端续传协议。

2026-10-08 23:39:09 211

原创 Flutter 为什么能跨端成功:从 Widget、自绘引擎到 JIT 与 AOT

讲清 Flutter 的跨平台架构、Dart JIT 与 AOT、热重载、渲染流水线和平台插件,分析它在效率、一致性与性能上的优势及适用边界。

2026-10-08 23:37:16 508 1

调用系统闹钟

android跳转到系统闹钟页面进行闹钟的设定。

2015-12-14

win7图标异常修复

win7图标异常修复软件。解决你的烦恼

2015-12-01

android调用系统功能

手机摇一摇,自动发短信,获取坐标,监听来电,判断手机来电号码,进行自动接通来电或者发短信。

2016-01-25

MyEclipse10.0注册机

MyEclipse10.0注册机,里面有操作文档

2016-02-29

FlowLayout

使用java中的FlowLayout流式布局实现热门标签的实现。

2015-12-07

ListViewForScrollview

解决listview嵌套scrollView无法完全显示的问题。仅仅是重写了OnMeasure的方法。保留了listview的其他方法。

2015-12-07

android闹钟

android调用系统闹钟,基本实现功能

2015-12-14

android报表

android各类图标集合

2015-12-01

短信验证登录

短信验证登录,基于mob后台,短信验证码

2015-12-01

仿360进度条波浪效果

仿360进度条波浪效果,效果不错,一看就懂

2015-12-01

3D卡片翻页

CardView卡片翻页,这个效果我找了好久。满足你的动画效果

2015-12-01

HiJson64位and32位

HiJson64位and32位下载安装包,json数据结构清晰到爆

2015-12-01

android时间轴

实现android中漂亮的时间轴。其实思路就是将时间轴的每一个节点看成listview的一个item

2015-12-07

Genymotion-ARM

Genymotion-ARM-Translation.zip。解决genymotion报错Installation error: INSTALL_FAILED_CPU_ABI_INCOMPATIBLE

2015-12-17

图片轮播广告

android图片轮播模板的调调

2015-12-01

android广告

android图片轮播,增加图片切换对称的效果,自带缓存效果,效果不错。

2015-12-01

ShareSdk第三方登录

shareSdk第三方登录。手机号,qq登录,微信登录,新浪微博登录。

2015-12-15

流式布局热门标签

android通过流失布局frowlayout实现热门标签,子控件用checkbox。

2016-02-26

android树状图显示历史记录

树状图,监听到点击每一个树状图,listview虚线显示,使用fragment分页显示。

2016-06-27

SQLiteManager4Setup

SQLiteManager4Setup下载安装包,主要是查看svn里面的内置sqlite库进行操作

2018-06-29

信鸽推送Android端(Android信鸽推送demo)

信鸽推送集成。注意修改ACCESS ID,ACCESS KEY,应用包名,添加设备的token。这里注意token对应的是手机。每台手机的token是唯一值,不会改变。

2017-03-23

pickerview

pickerview的简单使用,省市区三级联动。

2016-12-21

handler消息机制实现控制进度条

使用hangdler消息机制更新进度条的状态,有开始,暂停,终止,重新开始线程的操作

2016-06-07

使用ViewPager实现帖子功能

使用ViewPager实现帖子列表的功能

2016-07-14

spinner下拉框

使用spinner实现hint,以及自定义背景

2016-10-26

Android实现问卷答题

android使用ViewPager实现问卷答题效果,统计最终分数,并采用仪类似表盘进度条的自定义View效果显示最终分数。

2016-07-13

android绘制饼图

android绘制饼图。详见博客:http://blog.youkuaiyun.com/z_zt_t/article/details/58588011

2017-02-28

Zxing二维码

仿微信扫一扫。自定义二维码界面

2016-10-21

SoapUI Pro 5.4.0 X64_破解版

soapUI是一个开源测试工具,通过soap/http来检查、调用、实现Web Service的功能/负载/符合性测试。   该工具既可作为一个单独的测试软件使用,也可利用插件集成到Eclipse,maven2.X,Netbeans 和intellij中使用。

2018-07-05

轮播设置间距透明度

ViewPager轮播设置间距,透明度渐变,使用android:clipChildren="false"/clipChild用来定义他的子控件是否要在他应有的边界内进行绘制。 默认情况下,clipChild被设置为true。 也就是不允许进行扩展绘制。

2018-06-29

android studio快捷键思维导图

android studio快捷键思维导图

2016-07-23

仿qq左滑删除

仿qq左滑删除,自定义了listview以及layout,重写了adapter,比较容易集成,实现效果好。代码可读性强

2016-06-22

SurfaceView实现抽奖大转盘

在imooc上看鸿洋的视频对着敲出来的。surfaceview实现抽奖大转盘的绘制

2016-07-29

Sublime Text

支持整个项目打开的编辑器,史上最性感的编辑器

2016-07-28

CAB制作工具包

CAB制作工具包

2016-11-29

ListView的全选反选

listview中的全选反选。使用as环境开发,是本人的第一个as程序,不得不传。item使用view+checkBox实现全选反选。

2016-07-25

空空如也

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

TA关注的人

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