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分钟闪退的根本原因。请在下次测试时注意观察日志文件的生成和内容记录。
|