美文网首页安卓学习
一张图学习ContentProvider的原理

一张图学习ContentProvider的原理

作者: 小怪兽大作战 | 来源:发表于2019-03-01 22:54 被阅读7次

    contentProvider用来向其他组件(本进程或其他进程)提供数据。contentProvider是由binder来实现的。我们知道,binder分为客户端和服务端,具体逻辑在服务端实现,客户端持有服务端的代理,通过调用代理的接口来调用服务端的逻辑。contentProvider也是一样,在其他进程中使用getContentProvider只是获得contentProvider的代理IContentProvider,通过这个代理来调用ContentProvide的方法。

    参考下面的图来简要说一下


    image.png

    1.使用者使用getContentProvider获得IContentProvider对象(ContextProvider的代理),用以进行各种操作。
    2.ActivityThread.acquireProvider查询是否已经启动了目标contentProvider,如果已经启动,直接返回IContentProvider对象;如果没有,请求AMS启动目标contentProvider。
    3.AMS启动contentProvider所在进程。
    3.1调用目标进程中ActivityThread.main方法。main方法中创建ActivityThread实例,创建消息队列,在AMS中绑定自身(通过ApplicationThread)。
    4.AMS通过Applicationthread向目标进程发出BIND_APPLICATION通知,目标进程中ActivityThread将将通知转发给消息队列。
    5.handler接收消息,创建Application,创建contentProvider,调用application.oncreate方法。
    6.AMS向使用者返回IContentProvider对象,使用者使用该对象调用ContentProvider的方法(底层由binder实现)。

    相关文章

      网友评论

        本文标题:一张图学习ContentProvider的原理

        本文链接:https://www.haomeiwen.com/subject/pofsuqtx.html