自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【稳定性】价值千金的稳定性专家路线

作为安卓稳定性高级工程师,你需要掌握从系统底层到应用层的全方位技术,才能真正解决那些棘手的稳定性问题。根据最新招聘信息和行业标准,我来为你梳理这份技术栈清单:Android系统架构全栈理解Linux系统原理Art虚拟机原理常见稳定性问题处理分析工具精通系统调试能力稳定性测试技术问题预防与优化工具开发能力编程语言基础功底小贴士:很多稳定性问题不是简单"修bug"就能解决的,而是需要从系统架构层面思考。就像小米招聘要求中说的:“对Android系统知从上到下都有一定的了解”。真正的稳定性专家,不是在问题出现后"

2025-11-19 23:05:21 510

原创 【service】binderservice的实战intent flag

Flag含义生命周期影响优先级影响常见用途没有实例则创建并绑定服务绑定存在期间服务存活正常优先级(除非配合别的 flag)不手动 startService 也能运行作为前台服务绑定取决于绑定和前台状态提升为前台优先级播放器、导航、持续连接如果你需要,我可以帮你画一个bindService flag 行为流程图,展示系统在处理时的具体调用和生命周期变化,这样更易于直观理解。要帮你画吗?仅用于绑定场景,提升进程和服务的运行优先级。不会自动创建或变成前台服务,不会显示通知。

2025-11-18 10:05:33 303

原创 【Linux】进程调度器

下面我给你一个 清晰、准确、面向最新 Linux 内核(5.x~6.x)的解释。你的三个问题分别是:我逐条解释。是的。在 Linux 6.x 内核中(包括最新的 6.10 LTS),Linux 仍然采用:CFS 仍然是桌面 Linux、服务器 Linux 中绝大多数进程使用的调度器。✔ CFS = 默认调度器,一直在维护和优化不是直接指定调度器,而是指定调度策略(policy)。调度策略由内核映射到具体调度器。用户态只能设置:✔ policy → 内核选定对应的调度器🔹 所以,进程并不直接选择 CFS

2025-11-18 00:10:05 681

原创 setprop debug.hwui.profile visual_bars有什么作用

是 Android 系统里的一个 调试属性,主要用于 GPU 渲染性能分析,它会让系统在屏幕上显示 HWUI(硬件加速 UI)绘制的时间条形图,方便开发者查看每一帧的渲染耗时。Android 的 UI 绘制通常使用 HWUI(Hardware-accelerated UI Toolkit)。当你设置:或者:后,再运行你的应用,屏幕顶部会出现一些竖形的彩色条,每个条代表一帧的绘制耗时,颜色区分了不同的渲染阶段(例如测量、布局、绘制、GPU 上传等)。显示原理每一帧的耗时分解:这些彩条的高度代表了

2025-11-13 17:13:50 382

原创 【窗口管理】从handleResumeActivity到画面显示

好的,你贴了的完整源码,这个方法其实是连接 Activity 生命周期恢复 和 window attach 显示过程的关键节点。之前我给的时序里确实简化了,没有写出这个中间桥梁,所以你觉得不连贯。我们现在重新完整讲一遍,以你的源码为基础,把漏掉的类也补上,同时解释每一步为什么这么做、涉及哪些组件。

2025-11-13 15:35:44 681

原创 【稳定性】深入理解 Android 的 debuggerd:系统级崩溃与 ANR 现场捕获神器

这篇文章面向 Android 系统开发、应用开发以及对系统异常分析有兴趣的工程师,会系统解释 debuggerd 的定位、原理和应用场景,并给出实用的调试技巧。

2025-11-13 14:35:30 1073

原创 【稳定性】system_app_anr@1760693457221.txt和anr_2025-10-17-17-30-35-009有什么区别

中,同时输出一个厂商定制格式的 ANR 日志,用来上传到异常分析平台(如 Bugly、iManager、HiCrash),所以就自然是多份文件。这在 Android 系统里是正常的,并不是重复抓错,而是两种不同“来源/用途”的 ANR记录。,我可以用图把 system_server、debuggerd、两个文件的生成顺序画出来,这样你一眼就能看清事件链路。→ 一个来自“系统监控记录”,一个来自“进程现场抓取”,属于同一事件,两者互补,不是重复。我明白你现在的疑问,其实你遇到的是。的,但针对同一次事件。

2025-11-12 17:22:38 851

原创 【窗口】分层角度来整体地理解 Android 窗口系统

HWComposer 是硬件抽象层的模块,由 SoC 厂商实现(通常是 GPU/显示控制驱动),提供硬件加速的 Layer 合成能力。所处的位置,以及 App → Framework → SurfaceFlinger → HWC 的整个链路。SurfaceFlinger 是一个独立的系统服务进程,负责所有 Layer(图层)的最终合成与输出到显示屏。,把这些类和作用按层直观地连起来,你觉得要画吗?逐层讲解涉及的主要类和它们的作用,并把它们串成一个完整的流程。如果你愿意,我可以帮你画一个。

2025-11-12 17:01:31 888

原创 【窗口篇】windowState

WindowState 是 Android 窗口管理的“状态核心”,它存储了窗口的所有关键信息,是 WMS 实现窗口布局、调度、渲染的基础。对于应用开发者而言,虽然无法直接操作 WindowState,但理解其核心职责(状态管理、权限校验、渲染衔接)能帮助更好地排查窗口相关问题(如悬浮窗无法显示、窗口位置异常、多窗口适配问题);对于系统开发者而言,WindowState 是定制窗口管理逻辑(如修改窗口层级、新增窗口类型)的核心切入点。GPT : 好的,我们来介绍一下这个类。在 Android 系统的。

2025-11-12 14:53:28 1046

原创 【稳定性】kill进程失败

你提的场景是:Android进程发生了 ANR(Application Not Responding),而且它的运行状态是(通常在 Linux 状态码里是D),想判断它的 I/O 时间是不是太长。

2025-11-11 11:23:09 609

原创 【工具】通过在专利网站检索来预言某个技术方向

你想先看一个这样的检索案例吗?这样你可以自己操作查找。如果你需要,我可以帮你。

2025-11-10 13:37:41 704

原创 【fwk进阶】抓开机trace-perfetto配置

修改boottrace为可执行文件。

2025-10-30 16:43:27 284

原创 【性能】android 启动丢帧分析全攻略

宏观用 Perfetto Frame Timeline 看到启动期每一帧的全链路微观用 simpleperf / FrameMetrics 针对单线程/单阶段实时监控用 dumpsys gfxinfo 或开发者选项的 GPU 呈现模式分析这样你的启动卡顿分析不仅仅停留在 CPU 层面,而是完整链路覆盖:UI、渲染、合成、硬件同步。📌 我可以帮你配一张启动丢帧分析流程图从采集 → 定位超时帧 → 归因到阶段 → 针对性工具分析,你要我画这个图吗?这样文章会更直观易读。

2025-10-22 15:49:13 1117

原创 【稳定性AI】Perfetto vs simpleperf

Perfetto 是 Google 开发的跨平台性能跟踪工具,Android 从 10(Q)开始全面集成。它替代了老的 systrace,功能更强,可采集内核事件、系统服务调用、应用方法执行等。在某段时间内,哪些进程/线程在运行?CPU、GPU、I/O 利用率如何变化?线程之间的调度和唤醒关系是什么?simpleperf 是 Android 平台的CPU 采样分析工具,类似 Linuxperf。它的优势是能精确到函数调用栈,帮助开发者找到真实的热点函数。哪个函数/方法占用了最多的 CPU?

2025-10-22 15:26:13 1101

原创 【稳定性】稳定性方向技术路线

稳定性岗位是技术广度很大的角色,需要既懂应用开发,又懂系统底层调试与性能分析。核心是快速定位问题根因,并用合适工具验证和解决。如果你愿意,我可以帮你整理一个“Android 稳定性工程师技能图谱”,按基础/进阶/专家分级,方便你按阶段学习。你需要我帮你做这个吗?

2025-10-22 15:07:17 693

原创 【fwk进阶】Binder死亡代理详解

我对这个远程 Binder 引用感兴趣,请在它死了的时候通知我”在 binder_ref 上挂 binder_ref_death。调用 DeathRecipient.binderDied()找到所有引用该node的binder_ref。唤醒Client线程处理work。这就是注册一个死亡代理。

2025-09-18 11:40:13 925

原创 【fwk基础】binder缓冲区精讲

在 Binder 驱动中,每个参与 Binder 通信的进程(无论是 client 还是 server)启动时,驱动会为它创建一个内核对象。唯一标识一个进程在 Binder 驱动中的实体(相当于“Binder 世界里的进程 PCB”)保存该进程的所有 Binder 相关资源:binder_node(该进程暴露给外部的 binder 对象)buffer 池(binder_alloc 结构管理)todo 队列(待处理事务)引用计数、锁等同步机制你可以理解。

2025-09-10 11:31:39 1121

原创 [fwk基础] 调试手段tombstoned 与 debuggerd

一句话总结tombstoned 是“调度员 + 记录员”,debuggerd 是“搬运工 + 现场采集员”。tombstoned 负责会话、权限、文件管理debuggerd 负责附加进程、回溯栈、符号化两者协作让 Android 的 Native 崩溃分析体系结构更稳定、安全、可维护💡经验建议Debug 时,优先用直接拿 backtrace,轻量快速崩溃分析需 tombstone 可用或直接分析遇到 “Permission denied” 要先检查 ptrace 限制和 SELinux。

2025-08-22 11:30:03 1183

原创 [fwk基础]debugged介绍

debuggerd在 Android 调试领域扮演了一个关键桥梁比 gdb 更轻量,适合线上环境比 logcat 更底层,可以看到 native 调用链是 tracing、watchdog 等系统稳定性机制的核心工具无论你是调试Java 层 JNI 崩溃,还是分析native 服务死锁debuggerd都是绕不开的工具。如果你愿意,我下一步可以帮你画一张installd→ libc waitpid → 内核 do_wait → debuggerd attach 获取调用栈的全路径时序图,

2025-08-22 11:29:32 716

原创 [fwk基础]debugged介绍

debuggerd在 Android 调试领域扮演了一个关键桥梁比 gdb 更轻量,适合线上环境比 logcat 更底层,可以看到 native 调用链是 tracing、watchdog 等系统稳定性机制的核心工具无论你是调试Java 层 JNI 崩溃,还是分析native 服务死锁debuggerd都是绕不开的工具。如果你愿意,我下一步可以帮你画一张installd→ libc waitpid → 内核 do_wait → debuggerd attach 获取调用栈的全路径时序图,

2025-08-22 11:23:15 838

原创 【fwk基础】repo sync报错后如何快速修改更新

你这个问题是在同步时遇到本地改动(这些本地文件和远程分支上的文件不一致),导致被阻塞,从而 sync 失败。这说明,git 为了保护你的修改不被覆盖,所以拒绝切换分支或 checkout。

2025-08-15 17:17:16 480

原创 [fwk基础]调试手段-打开proto日志dumpsys window logging

可动态打开 WMS 各类调试标签,提升系统窗口层级的分析效率。常用于系统级异常、动画卡顿、窗口切换无响应、焦点错乱等排查场景。熟练掌握这些标签的意义,能大幅度提升你对 Android 系统窗口管理的调试能力。如需要某个标签日志样例或更深层技术细节,欢迎继续追问!

2025-08-07 17:58:31 546

原创 [fwk基础]调试手段-kill命令

信号数字说明典型使用场景SIGHUP1终端挂起重启服务、关闭后自动退出SIGINT2来自键盘的中断(Ctrl+C)终止前台进程(用户主动)SIGQUIT3退出(Core Dump), Ctrl+\输出堆栈,用于调试SIGKILL9立即终止(不可被捕获或忽略)强制杀死卡死的进程SIGTERM15终止(默认),可被处理平滑地让进程做善后后退出SIGSTOP19/17停止(不可被捕获或忽略)类似暂停,让进程挂起SIGCONT18/19继续。

2025-08-07 17:57:44 818

原创 [fwk基础]调试手段-kill命令

信号数字说明典型使用场景SIGHUP1终端挂起重启服务、关闭后自动退出SIGINT2来自键盘的中断(Ctrl+C)终止前台进程(用户主动)SIGQUIT3退出(Core Dump), Ctrl+\输出堆栈,用于调试SIGKILL9立即终止(不可被捕获或忽略)强制杀死卡死的进程SIGTERM15终止(默认),可被处理平滑地让进程做善后后退出SIGSTOP19/17停止(不可被捕获或忽略)类似暂停,让进程挂起SIGCONT18/19继续。

2025-08-07 17:54:41 1144

原创 [fwk基础]调试手段-logcat

logcat功能非常丰富,常用参数有-b(缓冲区选择)、-v(输出格式)、-f(输出文件)、-t和-T(快速定位日志)、-s(过滤),以及 tag:priority 过滤等。更多细节可以直接用查询。如需进一步了解某个参数的用法,可告诉我需要关注的点!

2025-08-07 17:34:41 243

原创 [fwk-oomadj]OOM adj取值含义介绍(5/5)

完整涵盖你提供的 OOM Adj(Out-Of-Memory Adjustment)各个取值的。

2025-07-31 10:38:14 794

原创 [fwk基础]persistent应用和进程处于PERSISTENT_SERVICE状态的区别(2/2)

对比点persistent应用 (-800)设定方式manifest声明persistent=“true”,系统签名被persistent进程或system进程bind并设重要标志是否自动重启是,AMS会立刻重启否,被杀后不保证自动重启adj优先级-800-700优先级高低最高(仅次于system_server/zygote)次高(绑定的保活客体,受制于bind关系)生命力除非极端情况(停用/异常),几乎不会被系统kill。

2025-07-31 10:31:49 785

原创 [fwk基础]persistent应用介绍(1/2)

在 Android 系统中,

2025-07-31 10:30:27 955

原创 [android w update]广播在w版本变化与源码解读

Android 16在 Android 16 中,无法保证使用 android:priority 属性或在不同进程中使用 IntentFilter.setPriority() 的广播传送顺序。广播优先级仅在同一应用进程中有效,而不会跨所有进程有效。此外,广播优先级会自动限制在 (SYSTEM_LOW_PRIORITY + 1, SYSTEM_HIGH_PRIORITY - 1) 的范围内。

2025-07-17 17:30:35 978

原创 [fwk]fd\epoll\trigger

不是每2秒都向节点写数据。lmkd 正确做法是设置 trigger 条件,长期 epoll/poll 等待内核事件。只有当压力成立并连续达到你 trigger 里的 for 秒数时才唤醒 epoll,不是每2秒必然wake你一次。只要压力没达到条件,lmkd 就静静等着,啥都不干。如果你需要实际采样流程源码分析或用户层触发例子,可以进一步说明!这是一个非常专业且常见的场景,内核 PSI 设计就是要同时支持多个进程分别注册不同 trigger,每个都可以有独立的阈值和持续时间。

2025-07-17 17:04:05 833

原创 [fwk-fans]activity intent flags

好的,下面为你详细翻译并解释上述关于和的官方文档注释。

2025-07-16 16:52:25 542

原创 [fwk]intent flags

以下是整理后intent flag的表格,涵盖所有 flags,包含:Flag 名称、值(十六进制)、主要作用/含义、常见应用场景,以及重要备注:

2025-07-16 16:44:07 919

原创 [fwk-AI]Cached Process和Empty Process的区别

Android内存管理中,缓存进程和空进程的区别在于:缓存进程(adj 900-950)保留着已关闭的组件实例,便于快速恢复;空进程(adj 950-999)则完全没有四大组件,仅保留进程本身以加快重启。当应用的所有组件被关闭或切到后台时,进程会被降级为缓存或空状态,adj升至900以上,成为系统优先回收的对象。这种机制平衡了前台体验与后台资源利用。

2025-07-15 15:30:11 662

原创 [fwk-ai]uid idle

当然可以!下面是一篇结构清晰、分级详尽、适合开发者阅读的。

2025-07-15 11:22:16 341

原创 [fwk-AI]WindowOrganizerController介绍

是 Android 12(Android S,API 31)及以后引入的窗口管理核心组件。它主要用于多窗口场景下,协调 WindowManagerService 与 WindowOrganizer(如 TaskOrganizer、ActivityOrganizer 等)之间的运作。

2025-07-08 10:39:00 1059

原创 [fwk-intentflags]startActivity的intent flag解析

【代码】[fwk基础]startActivity的intent flag解析。

2025-07-02 17:58:51 770

原创 【fwk基础】git cherry-pick需要跳过某个文件的合入

碰到某个文件有冲突但不想合入 ta 的改动时,git checkout --ours 文件名 && git add 文件名,即可保留当前分支的内容而不引入 cherry-pick 修改。最终完成即可。

2025-06-18 14:32:40 621

原创 【安卓基础】git常用操作汇总

已提交的更改:使用。未提交的更改:使用git diff。全面保存当前工作区更改:结合git stash和git diff。通过掌握这些命令,你可以灵活地在不同场景下创建和管理 Patch,以满足团队协作和代码共享的需求。

2025-03-27 15:36:51 452

原创 [fwk基础]android lmkd、psi、oomadj总结

本篇能学到的知识。

2024-08-29 20:40:22 2803 5

原创 【Oomadjuster项目问题实战】launcher oomadj老化导致被kill

ADJ_MEM_FACTOR_NORMAL 正常ADJ_MEM_FACTOR_MODERATE 风险水平适中ADJ_MEM_FACTOR_LOW 低内存ADJ_MEM_FACTOR_CRITICAL 内存危机当进程处于cached状态系统可以接受的pss值的水位线。/***/// === ProcessList.CACHED_APP_MAX_ADJ为900 ===i++) {// 返回最大的值*1024这里取mOomMinFreeHigh最大值也就是184320.

2024-08-15 20:02:45 1830

空空如也

空空如也

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

TA关注的人

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