【问题标题】:How do I catch content provider initialize?如何捕获内容提供程序初始化?
【发布时间】:2012-03-26 14:07:58
【问题描述】:

正如我们所知,内容提供程序会在应用程序运行时加载。但我想在内容提供商推出之前进行一些操作。我如何捕捉到这个操作?在调用内容提供者的 onCreate 方法之前

【问题讨论】:

    标签: android android-contentprovider


    【解决方案1】:

    我想我找到了解决方案。我创建了我的自定义应用程序类并重写了 attachBaseContext 方法

    <application android:name=".ApplicationController" ...>
    

    public class ApplicationController extends Application {
        @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
    
            // some of your own operations before content provider will launch
        }
    }
    

    【讨论】:

    • 目前可能可行,但不知道跨版本是否可靠。
    • 它在 17 个 api 中幸存下来))也许在功能中谷歌会为我们提供任何用于此操作的 api,但现在它可以工作。感谢您的回复!
    • 此解决方案有效,但功能不全。例如,Context.getMainLooper() 方法在 Application.onCreate() 之前调用时返回 null
    • 小心:在这个方法中getApplicationContext()也会返回null,因为Application.onCreate()还没有被调用。
    【解决方案2】:

    我的解决方案需要使用call(Uri, String, String, Bundle) API(因此,它不完全向后兼容)。但是我有我希望ContentProvider 在用于覆盖call 方法之前准备的东西。然后我在我的Application.onCreate() 中做getContentResolver().call(BASE_URI, METHOD, null, Bundle.EMPTY)。本质上,它将这些东西推迟到创建我的Application 之后,这是我们期望ContentProvideronCreate 自然地做的事情。

    【讨论】:

      猜你喜欢
      • 2019-10-24
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 2015-07-16
      相关资源
      最近更新 更多