3.4 DropBoxManagerService分析

DropBoxManagerService(DBMS)用于生成和管理系统运行时的一些日志文件。这些日志文件大多记录的是系统或某个应用程序出错时的信息。

下面来分析这项服务。其中向SystemServer添加DBMS的代码如下:


ServiceManager.addService(Context.DROPBOX_SERVICE,//服务名为“dropbox”

new DropBoxManagerService(context,

new File("/data/system/dropbox")));


3.4.1 DBMS构造函数分析

DBMS构造函数如下:

[—>DropBoxManagerService. java:DropBoxManagerService构造函数]


public DropBoxManagerService(final Context context, File path){

mDropBoxDir=path;//path指定dropbox目录为/data/system/dropbox

mContext=context;

mContentResolver=context.getContentResolver();

IntentFilter filter=new IntentFilter();

filter.addAction(Intent.ACTION_DEVICE_STORAGE_LOW);

filter.addAction(Intent.ACTION_BOOT_COMPLETED);

//注册一个Broadcast监听对象,当系统启动完毕或者设备存储空间不足时,会收到广播

context.registerReceiver(mReceiver, filter);

//当Settings数据库相应项发生变化时候,也需要告知DBMS进行相应处理

mContentResolver.registerContentObserver(

Settings.Secure.CONTENT_URI, true,

new ContentObserver(new Handler()){

public void onChange(boolean selfChange){

//当Settings数据库发生变化时候,BroadcastReceiver的onReceive函数

//将被调用。注意第二个参数为null

mReceiver.onReceive(context,(Intent)null);

}

});

}


根据上面代码可知:DBMS注册一个BroadcastReceiver对象,同时会监听Settings数据库的变动。其核心逻辑都在此BroadcastReceiver的onReceive函数中。该函数在以下3种情况发生时被调用:

当系统启动完毕时,由BOOT_COMPLETED广播触发。

当设备存储空间不足时,由DEVICE_STORAGE_LOW广播触发。

当Settings数据库相应项发生变化时候,该函数也会被触发。

这个函数内容较简单,主要功能是存储空间不足时需要删除一些旧的日志文件以节省存储空间。读者可自行分析这个函数。