【问题标题】:ContentProvider destruction/lifecycleContentProvider 销毁/生命周期
【发布时间】:2014-06-05 05:20:51
【问题描述】:

我很好奇是否有人可以解释 ContentProvider 的生命周期。我对是否、何时以及在何种情况下销毁提供者特别感兴趣。 the documentation 似乎没有涵盖这一点。

this article 的 ContentProvider 部分谈到文档很难获得,但它包含一个 Google Groups 讨论的链接,Google 的一位工程师在该讨论中留下了快速回复,称“内容提供者永远不会被破坏。它们的存在是为了整个过程的生命周期。”

好的,也许 ContentProvider 的生命周期与它的进程一样长,但它的进程能够存活多久?假设我有一个提供 ContentProvider 的应用程序,而来自另一个应用程序的查询是创建我的 ContentProvider 进程的唯一原因(即,没有 Activity 或 Service 也在运行。)该进程真的会无限期地继续运行吗?当 Android 资源不足时,它会破坏服务等组件。当资源紧张时,ContentProviders 是否也不会被销毁?

【问题讨论】:

    标签: android android-contentprovider


    【解决方案1】:

    我对提供程序是否、何时以及在何种情况下被销毁特别感兴趣

    它是在您的进程启动时创建的(甚至在您的 Application 对象创建之前),并且它一直存在到进程终止。

    它的进程存活多久?

    这取决于应用程序、用户和设备的情况。

    这个过程会无限期地继续运行吗?

    没有。

    当系统资源不足时,Android 会破坏服务等组件。

    不,它没有。当系统内存不足时,Android 会终止进程。

    当资源紧张时,ContentProviders 是否也不是被销毁的候选对象?

    可以终止包含ContentProvider 的进程,无论是由于内存不足、年龄过大、用户操作等原因。

    【讨论】:

    • 您能否为第一点提供一些支持文档?只是想阅读更多内容。
    • @notJim:没有记录——我希望是。实际上,这个故事比我想象的要复杂一些,因为我在写完这个答案后的某个时间对这一点进行了一些测试。粗略地说,您的 ContentProvider 实例与您的 Application 实例同时创建。我忘记了它们的构造函数和onCreate() 调用的确切顺序。
    • It is created when your process is started (even before your Application object is created), and it lives until the process is terminated...这是否意味着当我的应用程序被杀死时,内容提供者会因为进程死亡而被破坏?
    • @Stranger:正确。
    【解决方案2】:

    内容提供者没有特定的生命周期,您无能为力 来控制它。该框架管理内容提供​​者(进程)的创建和销毁。

    当进程之外的外部客户端或组件向内容提供者发出请求时,该请求将在提供者所在进程的线程池中的一个线程中处理。当没有更多请求时,该进程可以如果该过程中没有更多活动组件(活动,服务),则回收。但这是 Android 做出的决定。

    【讨论】:

      猜你喜欢
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      相关资源
      最近更新 更多