Android 如何捕获内容提供程序初始化?

Android 如何捕获内容提供程序初始化?,android,android-contentprovider,Android,Android Contentprovider,正如我们所知,内容提供者在应用程序运行时加载。但我想在内容提供商启动之前做一些操作。我怎样才能抓住这次行动?在调用内容提供商的onCreate方法之前,我想我已经找到了解决方案。我创建了自定义应用程序类并重写了attachBaseContext方法 <application android:name=".ApplicationController" ...> 我的解决方案需要使用调用(Uri、String、String、Bundle)API(因此,它不是完全向后兼容的)。但是我有一

正如我们所知,内容提供者在应用程序运行时加载。但我想在内容提供商启动之前做一些操作。我怎样才能抓住这次行动?在调用内容提供商的onCreate方法之前,我想我已经找到了解决方案。我创建了自定义应用程序类并重写了attachBaseContext方法

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

我的解决方案需要使用
调用(Uri、String、String、Bundle)
API(因此,它不是完全向后兼容的)。但是我有一些东西,我希望
ContentProvider
在重写
call
方法之前准备好。然后在我的
Application.onCreate()中执行
getContentResolver().call(BASE\u URI,METHOD,null,Bundle.EMPTY)
。本质上,它将这些内容推迟到创建我的
应用程序之后,这是我们期望
ContentProvider
onCreate
能够自然完成的工作。

目前可能会起作用,但我不知道它在不同版本之间是否可靠。它在17个API中幸存了下来。)也许谷歌会为我们提供任何用于此操作的API,但现在它可以工作了。谢谢你的回复!这个解决方案是可行的,但是它没有完全发挥作用。例如,
Context.getMainLooper()
方法在
Application.onCreate()
之前调用时返回
null
。请小心:在这个方法中,
getApplicationContext()
也将返回
null
,因为
应用程序.onCreate()
尚未调用。它目前也在Oreo上工作。
public class ApplicationController extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);

        // some of your own operations before content provider will launch
    }
}