Skip to content

Commit

Permalink
ADD: auguest monthly
Browse files Browse the repository at this point in the history
  • Loading branch information
RicardoJiang committed Sep 17, 2024
1 parent 8900acd commit eb8ceba
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 1 deletion.
48 changes: 48 additions & 0 deletions docs/news/2024/news-2024-08.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,51 @@
月报的主要内容包括:整理展示我在最近一个月所查阅的 Android 性能优化领域的最新技术动态、精选博客,精选视频等内容。

## 精选博客
### [记一次TooManyRequestsException崩溃排查历程](https://juejin.cn/post/7399462326062186506)
本文主要讲述了货拉拉 Android 项目华为鸿蒙设备出现 TooManyRequestsException 问题的排查历程。

- 问题背景:4 月开始公司 Android 项目线上华为鸿蒙设备出现大量 TooManyRequestsException 问题,社区有零散反馈但无明确解决方案。
- 排查过程:从 WorkManager 库的注册网络监听代码入手,发现闪屏广告中使用 WorkManager 下载图片的逻辑与问题有关,下线部分城市闪屏广告后崩溃异常有所下降。
- 源码分析:深入剖析了 registerDefaultNetworkCallback 在 Android11 和 Android14 中的源码逻辑,包括相关类和方法的具体实现以及异常抛出的机制。
- 解决措施:采取保证成对调用、控制调用数量、插桩收拢管理等方法,有效监控和管理调用,降低出错风险。
- 监控指标:由于不确定华为是否改动源码,需线上监控 registerDefaultNetworkCallback 的使用情况,记录调用次数以优化逻辑。

### [Java虚拟线程探究与性能解析](https://mp.weixin.qq.com/s/G1-qLXqHva193LBJ6pSbgg)
这篇文章主要介绍了 Java 虚拟线程,包括其背景、实现、使用、注意事项和性能测试等方面,具体内容如下:

- 背景:平台线程有限制,IO 密集型请求易导致问题,响应式编程成本高,虚拟线程可可解决这些问题。
- 实现:是 java.lang.Thread 的实例,不绑定操作系统线程,运行阻塞 I/O 时会挂起。
- 使用:可通过 Thread 类或 Executors 创建,运行时由 Java 运行时调度,某些场景会被固定。
- 注意事项:写同步代码和用阻塞 API,不共用虚拟线程,用信号量限制并发,避免缓存昂贵对象,避免长时间频繁固定。
- 性能测试:虚拟线程处理请求耗时低,吞吐量高。
- 结语:虚拟线程是对并发编程模型的革新,有望成为标准实践之一。

![](https://raw.gitmirror.com/RicardoJiang/resource/main/2024/september/p1.png)

### [鸿蒙JS崩溃,如何分析?](https://mp.weixin.qq.com/s/fbrynQBeqOXHzUYuqAVrnQ)
这篇文章主要介绍了鸿蒙 JS 崩溃的分析方法,包括日志信息、异常类型、堆栈、release 模式编译产物、DevEco Studio 还原堆栈以及 hstack 还原堆栈等内容,具体如下:

- 日志信息:介绍了崩溃日志信息中各个字段的解释,如设备信息、版本信息、模块名、异常原因等。
- 异常类型:JS 异常根据不同的异常场景,在 Reason 字段进行了分类,包括 Error、TypeError、SyntaxError、RangeError 等错误类型,并对每种类型进行了详细解释。
- 堆栈:StackTrace 字段存放的是 JS 异常的调用栈信息,文章介绍了四种调用栈的显示场景,包括可直接通过超链接跳转到对应错误代码行、包含 SourceMap is not initialized yet 提示、打印 native 栈以及出现 Cannot get Source Map info, dump raw stack 信息等。
- release 模式编译产物:在进行堆栈还原之前,需要拿到一些文件,这些文件只在构建 release 包才会有,包括 sourcemap 文件、带调试信息的 so 数据以及反混淆映射表等。
- DevEco Studio 还原堆栈:DevEco Studio 提供了 Release 应用堆栈解析功能,开发者可以利用构建产物中包含 Debug 信息的文件对 Release 应用中 C++ 堆栈、ArkTS 堆栈以及 ArkTS 堆栈中混淆的方法名和文件名进行还原。
- hstack 还原堆栈:hstack 依赖 Node 环境,需要将 Node.js 和 SDK 中的 native\llvm\bin 目录配置到环境变量中,使用指定命令进行堆栈还原,需要注意的是,对于 so 文件,一定要使用包含符号表的 so。
- JS 崩溃案例解析:以 JS 中类似空指针的异常 undefined 为例,介绍了解决方式,即增加保护性判断或在访问前增加 '?' 操作符。

![](https://raw.gitmirror.com/RicardoJiang/resource/main/2024/september/p1.webp)

### [HarmonyOS ArkUI工程框架解析](https://mp.weixin.qq.com/s/gf-IFcXDc201MpOjlNzGTg)
文章主要对 HarmonyOS ArkUI 工程框架进行了解析,包括响应式和工程化两方面,具体内容如下:

**响应式:**

- 示例:HelloWorld 实例中<message>驱动视图变更,<onClick>更改值触发更新。
- 机制:编译后重写属性描述器实现响应式,与 Vue 相似但更聚焦细粒度属性更新,抛弃 VDOM DIFF 优化性能。
- 更新流程:属性变化标记组件为脏并维护依赖,在<updateDirtyElements>中消费脏节点,渲染管线根据 vSync 信号清理。

**工程化:**

- 语言:定制语言插件实现声明式语法,DevEcoStudio 的 LSP 服务继承并拓展相关规则,利用 TypeScript 生态包装。
- 语法:ArkTS 打包由 Rollup 完成,loader 复用 ts compiler 逻辑处理语法糖和响应式包装,并转换语法树。
- 调试:ArkTS 调试依托虚拟机,通过切换调度表和检查断点条件控制程序,将调试模块注入虚拟机。
2 changes: 1 addition & 1 deletion mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ nav:
- practical/memory/memory-usage-analyse.md
- 技术月报:
- 2024:
- news/2024/news-2024-07.md
- news/2024/news-2024-08.md
- news/2024/news-2024-07.md
- news/2024/news-2024-06.md
- news/2024/news-2024-05.md
Expand Down

0 comments on commit eb8ceba

Please sign in to comment.