Files
mkdocs/docs/Obsidian笔记体系/Daily/2024-06-02.md
renjianbo bf169cc8b2 测试
2026-01-12 18:12:00 +08:00

203 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2024-06-02
## 基本信息
- **日期**: 2024-06-02
- **星期**: 星期日
- **天气**: 多云
- **心情**: 良好
## 今日计划
### 工作安排
- [x] 完成性能测试
- [x] 分析测试结果
- [x] 修复发现的问题
### 学习计划
- [x] 学习Binder机制
- [ ] 阅读Handler源码
### 其他计划
- [x] 整理技术笔记
## 工作记录
### 已完成
- ✅ 完成性能测试
- 时间: 09:00 - 11:00
- 内容: 完成了系统启动性能测试、内存性能测试、流畅度测试
- 收获: 掌握了性能测试方法,了解了系统性能现状
- ✅ 分析测试结果
- 时间: 11:00 - 13:00
- 内容: 分析了性能测试数据,发现了几个性能瓶颈
- 收获: 学会了使用Systrace分析性能问题
- 相关链接: [[09-调试与工具链/Systrace_Perfetto全解读]]
- ✅ 修复发现的问题
- 时间: 14:00 - 17:00
- 内容: 修复了内存泄漏问题,优化了启动流程
- 收获: 提升了问题排查和解决能力
- ✅ 学习Binder机制
- 时间: 17:00 - 19:00
- 内容: 学习了Binder机制的原理和实现
- 收获: 深入理解了Android进程间通信机制
- 相关链接: [[05-进程与线程通信/Binder机制(内核到Java层)]]
### 进行中
- 🔄 阅读Handler源码
- 开始时间: 19:00
- 当前进度: 刚开始阅读
- 遇到的问题: 源码较复杂,需要更多时间理解
- 下一步计划: 明天继续阅读,整理笔记
### 待处理
- ⏳ 整理技术笔记
- 计划时间: 明天
- 优先级: 低
## 学习记录
### 技术学习
- **学习内容**: Binder机制原理和实现
- **学习时间**: 17:00 - 19:00
- **学习方式**: 阅读文档和源码
- **关键收获**:
1. Binder是Android系统进程间通信的核心机制
2. Binder使用驱动实现,支持跨进程调用
3. Binder使用引用计数管理对象生命周期
4. Binder的零拷贝机制提升了性能
- **相关链接**: [[05-进程与线程通信/Binder机制(内核到Java层)]]
### 源码阅读
- **阅读模块**: Binder驱动
- **阅读时间**: 17:00 - 19:00
- **关键理解**:
- Binder驱动位于内核层,提供进程间通信能力
- 使用mmap实现内存映射,实现零拷贝
- 通过引用计数管理Binder对象生命周期
- **疑问**:
- Binder的性能优化点有哪些?
- 如何调试Binder通信问题?
- **相关链接**: [[05-进程与线程通信/Binder机制(内核到Java层)]]
### 问题解决
- **问题描述**: 内存测试发现内存泄漏
- **解决过程**:
1. 使用LeakCanary检测内存泄漏
2. 分析泄漏路径,找到泄漏原因
3. 修复泄漏问题
- **解决方案**: 修复了Handler持有Activity引用导致的内存泄漏
- **经验总结**:
- 使用LeakCanary可以快速发现内存泄漏
- Handler要使用静态内部类+WeakReference
- 及时释放资源很重要
- **相关链接**: [[06-性能优化体系/内存优化(LeakCanary原理)]]
## 会议记录
无
## 思考与总结
### 今日收获
1. **技术收获**: 深入理解了Binder机制,对Android进程间通信有了清晰的认识
2. **工作收获**: 完成了性能测试,发现并修复了问题,提升了系统性能
3. **学习收获**: 通过问题解决,提升了问题排查和解决能力
### 今日反思
- **做得好的地方**:
- 按时完成了性能测试
- 及时修复了发现的问题
- 通过学习和实践加深了理解
- **需要改进的地方**:
- Handler源码阅读进度较慢
- 技术笔记整理不够及时
- **改进计划**:
- 明天完成Handler源码阅读
- 及时整理技术笔记
### 明日计划
1. 完成Handler源码阅读,整理笔记
2. 继续优化系统性能
3. 准备下周工作计划
## 技术笔记
### Binder机制
- **内容**: Android进程间通信的核心机制
- **关键理解**:
- Binder使用驱动实现跨进程调用
- 通过mmap实现零拷贝,提升性能
- 使用引用计数管理对象生命周期
- **代码示例**:
```java
// Binder使用示例
IBinder binder = ServiceManager.getService("service_name");
IMyService service = IMyService.Stub.asInterface(binder);
service.doSomething();
```
- **相关链接**: [[05-进程与线程通信/Binder机制(内核到Java层)]]
### 性能优化
- **内容**: 系统性能测试和优化
- **关键理解**:
- 使用Systrace可以系统化分析性能问题
- 内存泄漏是性能问题的重要原因
- 启动优化需要从多个方面考虑
- **相关链接**: [[06-性能优化体系/启动优化方法论]]
### 内存泄漏修复
- **内容**: 修复Handler导致的内存泄漏
- **关键理解**:
- Handler要使用静态内部类+WeakReference
- 及时释放资源,避免持有Context引用
- 使用LeakCanary可以快速发现内存泄漏
- **代码示例**:
```java
// 正确的Handler使用方式
private static class MyHandler extends Handler {
private WeakReference<Activity> mActivityRef;
MyHandler(Activity activity) {
mActivityRef = new WeakReference<>(activity);
}
@Override
public void handleMessage(Message msg) {
Activity activity = mActivityRef.get();
if (activity != null) {
// 处理消息
}
}
}
```
- **相关链接**: [[06-性能优化体系/内存优化(LeakCanary原理)]]
## 问题与疑问
### 问题1: Binder性能优化
- **问题描述**: Binder的性能优化点有哪些?
- **思考**: 需要深入研究Binder的实现细节
- **待解决**: 继续学习Binder相关文档
### 问题2: Handler源码理解
- **问题描述**: Handler源码较复杂,需要更多时间理解
- **思考**: 需要系统化阅读Handler相关源码
- **待解决**: 明天继续阅读,整理笔记
## 相关链接
- [[05-进程与线程通信/Binder机制(内核到Java层)]]
- [[06-性能优化体系/内存优化(LeakCanary原理)]]
- [[09-调试与工具链/Systrace_Perfetto全解读]]
## 备注
- 今天学习效果很好,对Binder机制有了深入理解
- 性能测试发现了问题并及时修复,提升了系统性能
- 需要加快Handler源码阅读进度