203 lines
6.0 KiB
Markdown
203 lines
6.0 KiB
Markdown
# 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源码阅读进度
|