多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
SystemServer创建ContentService的代码非常简单,如下所示: **SystemServer::ServerThread.run** ~~~ public void run() { ...... ContentService.main(context, factoryTest == SystemServer.FACTORY_TEST_LOW_LEVEL); ...... } ~~~ 以上代码中直接调用了ContentService的main函数。在一般情况下,该函数第二个参数为false。此main函数的代码如下: **ContentService.java::main** ~~~ public static IContentService main(Contextcontext, boolean factoryTest) { //构造ContentService实例 ContentService service = new ContentService(context, factoryTest); //将ContentService注册到ServiceManager中,其注册名叫“content” ServiceManager.addService(ContentResolver.CONTENT_SERVICE_NAME, service); returnservice; } ~~~ ContentService的构造函数的代码如下: **ContentService.java::ContentService** ~~~ ContentService(Context context, booleanfactoryTest) { mContext = context; mFactoryTest = factoryTest; getSyncManager(); //获取同步服务管理对象,接下来看它的代码 } ~~~ **ContentService.java::getSyncManager** ~~~ private SyncManager getSyncManager() { synchronized(mSyncManagerLock) { try { //创建一个SyncManager实例,它是ContentService中负责数据同步服务的 //主力成员。留待8.4节再详细分析它 if (mSyncManager == null) mSyncManager = new SyncManager(mContext,mFactoryTest); }...... return mSyncManager; } } ~~~ 看完以上代码读者可能会觉得ContentService比较简单。其实,ContentService中最难的功能是数据同步服务,不过该功能的实现都封装在SyncManager及相关类中了,所以在分析通知机制时不会和数据同步服务有太多瓜葛。 下面来分析通知机制实施的第一步,注册ContentObserver。该步骤由ContentResovler提供的registerContentObserver函数来实现。