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

  • 相关阅读:
    什么是架构
    jenkins权限插件配置
    解决Error response from daemon: oci runtime error: container_linux.go:247: starting container process
    解决“/tmp/crontab bad minute”问题
    yml链接mysql路径serverTimezone=UTC的那些坑
    java请求头导致特殊字符为空问题
    使用ssh连接WSL
    系统设计与任务分配
    需求规格说明书
    选题报告
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/8317726.html
Copyright © 2011-2022 走看看