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