调试系列3:dropBox源码篇

一、启动流程

DropBoxManagerService(简称DBMS) 记录着系统关键log信息,主要功能用于Debug调试。

1.1 注册DBMS

当系统启动过程中SystemServer.java中的startOtherServices()方法中启动:

[-> SystemServer.java]

其中DROPBOX_SERVICE = “dropbox”, DBMS工作目录位于”/data/system/dropbox”。

1.2 创建DBMS

[-> DropBoxManagerService.java]

当下面3种情况任一发生:

  • 存储设备可用空间低;
  • 开机完毕;
  • Settings数据库变化;

则会都触发执行mReceiver的onReceive方法,该方法主要功能是给dropbox目录所对应的存储空间进行搜身,接下来再说说这个搜身过程。

1.3 广播接收者

DBMS中的mReceiver定义如下:

1.3.1 init

dropbox文件格式为tag@时间戳.txt或者tag@时间戳.txt.gz,例如system_server_wtf@1465650845355.txt

1.3.2 trimToFit

trimToFit过程中触发条件是:

  • 文件有效时长超过3天;
  • 最大文件数超过1000;
  • 剩余可用存储设备过低;

二、处理流程

当应用出现Crash时,调用ActivityManagerService的handleApplicationCrash方法,在该方法内部会调用addErrorToDropBox

2.1 AMS.addErrorToDropBox

[–>ActivityManagerService.java]

(1). dropbox文件输出内容项:

  1. Process,flags, package等头信息;
  2. 当logFile不为空,则添加log信息到dropbox,最大上限为256KB;
  3. 当stack不为空,则添加stacktrace到dropbox;
  4. 当dropboxTag所对应的settings项不等于0,则输出logcat的events/system/main/crash信息。

(2). dropbox文件名

dropbox文件名为dropboxTag@xxx.txt

  • dropboxTag = processClass(process) + “_” + eventType;
    • processClass:分为system_server, system_app, data_app;
    • eventType:分为crash,anr,wtf
  • xxx代表的是时间戳;
  • 后缀除了.txt,还可以是.txt.gz压缩格式。

例如system_server_crash@1465650845355.txt,代表的是system_server进程出现crash,记录该文件时间戳为1465650845355。

2.2 DBM.addText

[-> DropBoxManager.java]

在DropBoxManager中有addText, addData, addFile方法,三分归一统,对应于DBMS的add()方法。

2.3 DBMS.add

小结

当应用出现Crash时,调用AMS的handleApplicationCrash方法,该方法最终会调用DBMS,将数据保存在目录/data/system/dropbox,当出现crash, anr, wtf或者存储设备可用空间低,以及开机完成时利用DropBoxManager,再通过binder向DBMS发出请求,完成信息的收集工作。 DBMS有很多常量参数:

  • DEFAULT_AGE_SECONDS = 3 * 86400:文件最长可存活时长为3天
  • DEFAULT_MAX_FILES = 1000:最大dropbox文件个数为1000
  • DEFAULT_QUOTA_KB = 5 * 1024:分配dropbox空间的最大值5M
  • DEFAULT_QUOTA_PERCENT = 10:是指dropbox目录最多可占用空间比例10%
  • DEFAULT_RESERVE_PERCENT = 10:是指dropbox不可使用的存储空间比例10%
  • QUOTA_RESCAN_MILLIS = 5000:重新扫描retrim时长为5s

当然上面这些都是默认值,完全可以通过设置content://settings/global数据库中相应项来设定值。

作者微博:@Gityuan

原文出处:Gityuan.com

1 收藏 评论

关于作者:gityuan

Android系统工程师,www.gityuan.com博主,个人新浪微博:http://weibo.com/gityuan 个人主页 · 我的文章 · 3 ·     

可能感兴趣的话题



直接登录
跳到底部
返回顶部