一、启动流程
DropBoxManagerService(简称DBMS) 记录着系统关键log信息,主要功能用于Debug调试。
1.1 注册DBMS
当系统启动过程中SystemServer.java中的startOtherServices()方法中启动:
[-> SystemServer.java]
1 2 3 4 5 6 7 8 9 |
private void startOtherServices() { try { ServiceManager.addService(Context.DROPBOX_SERVICE, new DropBoxManagerService(context, new File("/data/system/dropbox"))); } catch (Throwable e) { reportWtf("starting DropBoxManagerService", e); } ... } |
其中DROPBOX_SERVICE = “dropbox”, DBMS工作目录位于”/data/system/dropbox”。
1.2 创建DBMS
[-> DropBoxManagerService.java]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
public final class DropBoxManagerService extends IDropBoxManagerService.Stub { ... public DropBoxManagerService(final Context context, File path) { mDropBoxDir = path; //保存工作目录 mContext = context; mContentResolver = context.getContentResolver(); IntentFilter filter = new IntentFilter(); //注册存储设备可用空间低的广播 filter.addAction(Intent.ACTION_DEVICE_STORAGE_LOW); //注册开机完毕的广播 filter.addAction(Intent.ACTION_BOOT_COMPLETED); context.registerReceiver(mReceiver, filter); //当Settings数据库变化时,则回调广播接收者的onReceive方法 //此处CONTENT_URI=content://settings/global" mContentResolver.registerContentObserver( Settings.Global.CONTENT_URI, true, new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { mReceiver.onReceive(context, (Intent) null); } }); mHandler = new Handler() { @Override public void handleMessage(Message msg) { // 发送广播 if (msg.what == MSG_SEND_BROADCAST) { mContext.sendBroadcastAsUser((Intent)msg.obj, UserHandle.OWNER, android.Manifest.permission.READ_LOGS); } } }; } } |
当下面3种情况任一发生:
- 存储设备可用空间低;
- 开机完毕;
- Settings数据库变化;
则会都触发执行mReceiver的onReceive方法,该方法主要功能是给dropbox目录所对应的存储空间进行搜身,接下来再说说这个搜身过程。
1.3 广播接收者
DBMS中的mReceiver定义如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context 试。
1.1 注册DBMS当系统启动过程中SystemServer.java中的startOtherServices()方法中启动: [-> SystemServer.java]
其中DROPBOX_SERVICE = “dropbox”, DBMS工作目录位于”/data/system/dropbox”。 1.2 创建DBMS[-> DropBoxManagerService.java]
当下面3种情况任一发生:
则会都触发执行mReceiver的onReceive方法,该方法主要功能是给dropbox目录所对应的存储空间进行搜身,接下来再说说这个搜身过程。 1.3 广播接收者DBMS中的mReceiver定义如下:
|