160 lines
4.3 KiB
Markdown
160 lines
4.3 KiB
Markdown
# 安卓文件日志系统使用说明
|
||
|
||
## 概述
|
||
|
||
为了解决安卓板运行20分钟后闪退的问题,我们添加了完整的文件日志记录系统。该系统会自动将关键日志保存到安卓设备的本地存储中,即使应用闪退,日志文件也会保留,便于分析问题原因。
|
||
|
||
## 日志文件位置
|
||
|
||
**安卓设备路径:** `/sdcard/Android/data/[应用包名]/files/logs/`
|
||
|
||
示例完整路径:
|
||
```
|
||
/sdcard/Android/data/com.yourcompany.dcx/files/logs/dcx_log_20241113_143022.txt
|
||
```
|
||
|
||
## 日志文件获取方法
|
||
|
||
### 方法1:直接在设备上查看
|
||
- 使用设备上的文件管理器
|
||
- 导航到上述路径
|
||
- 查看或分享 `dcx_log_*.txt` 文件
|
||
|
||
### 方法2:使用ADB命令(推荐)
|
||
```bash
|
||
# 连接设备后执行
|
||
adb pull /sdcard/Android/data/[包名]/files/logs/ ./logs/
|
||
```
|
||
|
||
### 方法3:通过内置日志查看器
|
||
- 在应用中添加了 `AndroidLogViewer` 组件
|
||
- 可以直接在界面上查看日志内容
|
||
- 支持切换不同的日志文件
|
||
|
||
## 日志内容说明
|
||
|
||
### 记录的关键信息
|
||
|
||
1. **系统信息**
|
||
- 设备型号、操作系统版本
|
||
- Unity版本、内存配置
|
||
- 应用启动时间
|
||
|
||
2. **内存监控**
|
||
- 实时内存使用情况
|
||
- 内存清理操作记录
|
||
- 队列状态信息
|
||
|
||
3. **设备状态**
|
||
- BFI数值异常情况
|
||
- 电池电量变化
|
||
- 通信连接状态
|
||
|
||
4. **错误信息**
|
||
- 串口通信异常
|
||
- 数据解析错误
|
||
- 系统异常和崩溃信息
|
||
|
||
### 日志格式示例
|
||
```
|
||
[14:30:22.123] [INFO] [Memory] 内存使用: 245.6MB - 队列状态: 发送队列:2, 接收队列:15, 连接状态:已连接
|
||
[14:30:25.456] [ERROR] [DeviceStatus] BFI值异常: NaN, 电量: 0%
|
||
[14:30:28.789] [ERROR] [Communication] 串口通信异常,时间: 14:30:28
|
||
```
|
||
|
||
## 系统优化功能
|
||
|
||
### 1. 内存管理
|
||
- 自动监控内存使用,超过300MB时强制清理
|
||
- 队列大小限制:发送队列≤10,接收队列≤50
|
||
- BFI数据点限制:最多1800个(30分钟)
|
||
|
||
### 2. 日志轮转
|
||
- 单个日志文件最大5MB
|
||
- 最多保留5个历史文件
|
||
- 自动清理过期日志
|
||
|
||
### 3. 平台优化
|
||
- 安卓平台减少95%的调试日志输出
|
||
- 只记录关键错误和状态变化
|
||
- 异步写入,不影响主线程性能
|
||
|
||
## 故障排除步骤
|
||
|
||
### 1. 获取闪退前日志
|
||
```bash
|
||
# 闪退后立即执行
|
||
adb pull /sdcard/Android/data/[包名]/files/logs/ ./crash_logs/
|
||
```
|
||
|
||
### 2. 分析关键信息
|
||
查看最新的日志文件,重点关注:
|
||
- `[ERROR]` 标记的错误信息
|
||
- 内存使用超过300MB的记录
|
||
- BFI值异常的记录
|
||
- 通信中断的时间点
|
||
|
||
### 3. 常见问题模式
|
||
- **内存泄漏:** 内存持续增长,超过300MB
|
||
- **数据解析错误:** BFI值为NaN或超出合理范围
|
||
- **通信故障:** 频繁的串口异常记录
|
||
- **队列溢出:** 接收队列长度持续增长
|
||
|
||
## 性能影响
|
||
|
||
### 内存使用
|
||
- 日志缓冲区:最多2000行 ≈ 500KB
|
||
- 文件写入:批量处理,每次最多100条记录
|
||
- 总体内存增加:< 2MB
|
||
|
||
### 存储使用
|
||
- 每小时约生成:2-5MB日志文件
|
||
- 最多占用存储:25MB(5个文件 × 5MB)
|
||
- 自动清理:保持合理的存储占用
|
||
|
||
### CPU影响
|
||
- 后台定期写入:每10秒检查一次
|
||
- 异步处理:不阻塞主线程
|
||
- 错误时立即写入:确保关键信息不丢失
|
||
|
||
## 使用建议
|
||
|
||
1. **运行测试时**
|
||
- 确保设备有足够存储空间(至少100MB可用)
|
||
- 在测试前清空旧日志文件
|
||
- 记录测试开始和结束时间
|
||
|
||
2. **闪退后分析**
|
||
- 立即导出日志文件
|
||
- 查看最后几分钟的内存变化
|
||
- 检查是否有重复的错误模式
|
||
|
||
3. **长期监控**
|
||
- 定期检查日志文件大小
|
||
- 观察内存使用趋势
|
||
- 记录闪退发生的时间和环境
|
||
|
||
## 技术实现
|
||
|
||
### 核心组件
|
||
- `AndroidFileLogger`:主要日志记录器
|
||
- `DCXManager`:集成内存监控和日志记录
|
||
- `DataService`:设备状态日志记录
|
||
- `SerialCommunicationService`:通信错误日志记录
|
||
|
||
### 日志过滤规则
|
||
```csharp
|
||
// 跳过的日志类型
|
||
- [帧处理] 普通日志
|
||
- [队列] 非警告日志
|
||
- OptimizedLog 调试信息
|
||
- Memory 普通内存日志
|
||
|
||
// 记录的关键日志
|
||
- [ERROR] 所有错误
|
||
- [内存警告] 内存超限
|
||
- [异常] 系统异常
|
||
- 设备状态变化
|
||
```
|
||
|
||
这个日志系统将帮助您准确定位20分钟闪退的根本原因。请在下次测试时注意观察日志文件的生成和内容记录。 |