zoukankan      html  css  js  c++  java
  • ContentProvider工作过程

    ContentProvider启动过程(通过query方法触发)

    ContentProvider.acquireProvider-->

    ApplicationContentResolver.acquireProvider-->

    ActivityThread.acquireProvider-->

    ActivityManagerService.startProcessLocked-->

    ActivityThread.main-->

    ActivityThread.attach-->

    ActivityManagerService.attachApplication-->

    ActivtiyManagerService.attachApplicationLocked-->

    ApplicationThread.bindApplicatoin-->

    ActivityThread.handleBindApplication-->

    handleBindApplication完成了Application的创建以及ContentProvider的创建,四个步骤

    1)创建ContextImpl和Instrumentation

    2)创建Application对象

    3)启动当前进程的ContentProvider并调用其onCreate方法

    4)调用Application的onCreate方法

    No1:

    ContentProvider所在进程启动时,ConentProvider会同时启动并将发布到AMS中。

    这个时候ContentProvider的onCreate要先于Application的onCreate而执行。

    No2:

    可以认为ContentProvide都是单实例的

    No3:

    访问ContentProvider需要通过ContentResolver,ContentResolver是一个抽象类,通过Context的getContentResolver方法获取的实际上是ApplicationContentResolver对象,ApplicationContentResolver类继承了ContentResolver并实现了ContentResolver中的抽象方法。

    No4:

    其他应用通过AMS来访问ContentProvider(实际是ContentProvider的Binder对象IContentProvider),而IContentProvider的实现者实际上是ContentProvider.Transport。因此其他应用调用IContentProvider的query方法最终会以进程间通信的方式调用ContentProvider.Transport的query方法。然后调用的就是ContentProvider的query方法,query方法的执行者再通过Binder返回给调用者,这样一来整个调用过程就完成了。

  • 相关阅读:
    九度oj 题目1371:最小的K个数
    九度oj 题目1131:合唱队形
    九度oj 题目1450:产生冠军
    九度oj 题目1135:字符串排序
    九度oj 题目1534:数组中第K小的数字
    九度oj 题目1179:阶乘
    九度oj 题目1369:字符串的排列
    九度oj 题目1100:最短路径
    [Luogu] 子串
    [Luogu] 魔法树
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/8317726.html
Copyright © 2011-2022 走看看