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返回给调用者,这样一来整个调用过程就完成了。

  • 相关阅读:
    小程序对象属性赋值
    'cross-env' 不是内部或外部命令,也不是可运行的程序
    npm太慢, 淘宝npm镜像使用方法
    git设置忽略文件.gitignore
    小程序报错 Please do not register multiple Pages in undefined.js
    小程序监听滚动条
    获取动态元素高度
    小程序BUTTON点击,去掉背景色
    封装token
    JS删除对象属性
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/8317726.html
Copyright © 2011-2022 走看看