iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Android中多个ContentProvider的初始化顺序是什么
  • 264
分享到

Android中多个ContentProvider的初始化顺序是什么

2023-06-30 11:06:34 264人浏览 独家记忆
摘要

这篇“Android中多个ContentProvider的初始化顺序是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“An

这篇“Android中多个ContentProvider的初始化顺序是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android中多个ContentProvider的初始化顺序是什么”文章吧。

1. 利用 ContentProvider 初始化 Library:

在日常开发过程中, 经常会遇到 Library 都需要传入 Context 参数以完成初始化,此时这个 Context 参数一般会从 Application 对象的 onCreate 方法中获取。于是,很多 library 都会提供一个 init 方法,在Application Object中完成调用.

public class MyApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        Library.init(this);    }}

至此, 相信大家可以看到依赖第三方 library 的时候,你必须得写一个自定义的 Application, 这样的用户体验可不太好。从 Android Debug Database, Firebase 中受到启发, 我们可以在 library 中创建一个 ContentProvider 来, 然后在 Manifest 中完成必要的注册信息, 在应用 Application 起来的时候会自动去初始化 library 中定义的 ContentProvider,现在就可以从 ContentProvider 中的 onCreate 里面得到 context 来初始化自己的 library。

public class FirstProvider extends ContentProvider {    @Override    public void attachInfo(Context context, ProviderInfo info) {        super.attachInfo(context, info);    }    @Override    public boolean onCreate() {        context = getContext();        // 这里可以初始化你需要的代码        return true;    }    ......}``` 这里顺便说一下Application, ContentProvider 初始化的顺序:```javaApplication.attacHBaseContext(super before) -> Application.attachBaseContext(super after) -> ContentProvider.attachInfo(super before) -> ContentProvider.onCreate() -> ContentProvider.attachInfo(super after) -> Application.onCreate(super before) -> Application.onCreate(super after)

2. 自定义 ContentProvider 初始化顺序:

如果 library 中有业务需要用到多个自定义 ContentProvider,如 A、B、C, 但是自定义用来初始化的 provider 为D, 由于初始化流程在 provider D 中开始的, 那么 A、B、C 就必须在 D 之后起来才行,那么D ->A、B、C 顺序怎么来定义呢?也就是如何保证 D 最先初始化。

为了定义 provider 的初始化顺序,可以再 Manifest 中设置 initOrder 的值(值越大,最先初始化),同时如果 Library 中有多进程, 那么也需要设置 android:multiprocess,具体如下:

<providerandroid:authorities="com.sivan.DContentProvider"            android:exported="false"            android:multiprocess="true"            android:initOrder="100"            android:name=".DContentProvider" />

如此在 Demo 中定义了 FirstProvider,SecondProvider 以及 ThirdProvider 的 initOrder 的值:

<provider        android:authorities="com.sivan.FirstProvider"        android:exported="false"        android:initOrder="100"        android:name=".FirstProvider" /><provider        android:authorities="com.sivan.SecondProvider"        android:exported="false"        android:initOrder="50"        android:name=".SecondProvider" /><provider        android:authorities="com.sivan.ThirdProvider"        android:exported="false"        android:name=".ThirdProvider" />

最后得到的日志信息如下:

MyApplication: attachBaseContext 0 pid = 3725
MyApplication: attachBaseContext 1 pid = 3725
FirstProvider: attachInfo 0 com.sivan.FirstProvider
FirstProvider: onCreate pid =3725
FirstProvider: attachInfo 1 com.sivan.FirstProvider
SecondProvider: attachInfo 0 info = com.sivan.SecondProvider
SecondProvider: onCreate  pid = 3725
SecondProvider: attachInfo 1 info = com.sivan.SecondProvider
ThirdProvider: attachInfo 0 info = com.sivan.ThirdProvider
ThirdProvider: onCreate  pid = 3725
ThirdProvider: attachInfo 1 info = com.sivan.ThirdProvider
MyApplication: onCreate 0 pid = 3725
MyApplication: onCreate 1 pid = 3725

可以看出初始化流程:FirstProvider -> SecondProvider -> ThirdProvider

所以我们需要根据 android:initOrder 来调整自定义用来初始化的 ContentProvider, 要保证 D 在 A、B、C 之前来初始化。

以上就是关于“Android中多个ContentProvider的初始化顺序是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Android中多个ContentProvider的初始化顺序是什么

本文链接: https://www.lsjlt.com/news/328392.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android中多个ContentProvider的初始化顺序是什么
    这篇“Android中多个ContentProvider的初始化顺序是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“An...
    99+
    2023-06-30
  • Android中多个ContentProvider的初始化顺序详解
    目录缘起:1. 利用 ContentProvider 初始化 Library:2. 自定义 ContentProvider 初始化顺序:总结缘起: 利用 ContentProvide...
    99+
    2024-04-02
  • Java类的初始化顺序是什么
    这篇文章主要讲解了“Java类的初始化顺序是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java类的初始化顺序是什么”吧!Java类的初始化顺序 多...
    99+
    2024-04-02
  • Listener、Filter、Servlet初始化顺序是什么
    这篇文章主要讲解了“Listener、Filter、Servlet初始化顺序是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Listener、Filter、Servlet初始化顺序是什么...
    99+
    2023-06-17
  • FlexApplication初始化顺序是怎么样的
    这篇文章将为大家详细讲解有关FlexApplication初始化顺序是怎么样的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Flex组件在建立的时候都会经历四个事件:preinitialize, init...
    99+
    2023-06-17
  • Java程序初始化顺序是怎么样的
    这篇文章主要为大家展示了“Java程序初始化顺序是怎么样的”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java程序初始化顺序是怎么样的”这篇文章吧。Java程序的初始化一般遵循三个原则(优先级...
    99+
    2023-06-26
  • Spring初始化与销毁的执行顺序是什么
    这篇文章主要介绍了Spring初始化与销毁的执行顺序是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring初始化与销毁的执行顺序是什么文章都会有所收获,下面我们一起来看看吧。演示 - 初始化销毁顺序@...
    99+
    2023-07-05
  • spring初始化方法的执行顺序及其原理是什么
    这篇文章主要讲解了“spring初始化方法的执行顺序及其原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“spring初始化方法的执行顺序及其原理是什么”吧!Spring中初始化方法的...
    99+
    2023-06-29
  • 详解Spring 中如何控制2个bean中的初始化顺序
    开发过程中有这样一个场景,2个 bean 初始化逻辑中有依赖关系,需要控制二者的初始化顺序。实现方式可以有多种,本文结合目前对 Spring 的理解,尝试列出几种思路。场景假设A,B两个 bean 都需要在初始化的时候从本地磁盘读取文件,其...
    99+
    2023-05-31
    spring bean bea
  • android初始化页面的方法是什么
    在Android中,可以通过以下几种方法来初始化页面:1. 在Activity的onCreate()方法中进行初始化操作。onCre...
    99+
    2023-08-09
    android
  • SpringBoot中的Bean的初始化与销毁顺序解析
    我今天学习到SpringBoot里面自定义Bean的初始化与销毁方法 我先总结一下我学到的四种方法: 方法一: 指定init-method 和 destory-method 方法二:...
    99+
    2024-04-02
  • java继承关系的类初始化和实例化顺序是怎样的
    这期内容当中小编将会给大家带来有关java继承关系的类初始化和实例化顺序是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。就像之前的一个评论.我们学习的是思路. 很多人都知道继承关系的类的初始化和实例...
    99+
    2023-06-17
  • SpringBoot中的Bean初始化方法是什么
    本篇内容介绍了“SpringBoot中的Bean初始化方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!注解说明使用注解: @Post...
    99+
    2023-06-21
  • spring中bean的初始化方法是什么
    在Spring中,bean的初始化可以通过两种方式来完成:使用@Bean注解的initMethod属性或者实现Initializin...
    99+
    2023-09-21
    spring
  • python中包初始化的作用是什么
    python中包初始化的作用是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面...
    99+
    2023-06-14
  • Linux中systemd的初始化流程是什么
    在Linux中,systemd是一个系统和服务管理器,它负责启动系统服务和管理系统进程。systemd的初始化流程如下: 系统引...
    99+
    2024-04-02
  • java中double初始化的方法是什么
    在Java中,可以使用以下方法来初始化一个double变量: 1、直接赋值: double num = 10.5; 2、使用构造器...
    99+
    2024-04-02
  • linux初始化的方法是什么
    Linux的初始化方法可以通过执行以下步骤来完成:1. 启动计算机并进入BIOS设置,在启动选项中选择从可引导介质(如硬盘或USB驱...
    99+
    2023-08-30
    linux
  • 初始化css的原因是什么
    今天小编给大家分享一下初始化css的原因是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2024-04-02
  • pycharm初始化的方法是什么
    PyCharm的初始化方法是通过安装并打开PyCharm,在首次打开时,会出现一个“Welcome to PyCharm”界面,用户...
    99+
    2023-09-13
    pycharm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作