【发布时间】:2012-03-26 14:07:58
【问题描述】:
正如我们所知,内容提供程序会在应用程序运行时加载。但我想在内容提供商推出之前进行一些操作。我如何捕捉到这个操作?在调用内容提供者的 onCreate 方法之前
【问题讨论】:
标签: android android-contentprovider
正如我们所知,内容提供程序会在应用程序运行时加载。但我想在内容提供商推出之前进行一些操作。我如何捕捉到这个操作?在调用内容提供者的 onCreate 方法之前
【问题讨论】:
标签: android android-contentprovider
我想我找到了解决方案。我创建了我的自定义应用程序类并重写了 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
}
}
【讨论】:
Context.getMainLooper() 方法在 Application.onCreate() 之前调用时返回 null。
getApplicationContext()也会返回null,因为Application.onCreate()还没有被调用。
我的解决方案需要使用call(Uri, String, String, Bundle) API(因此,它不完全向后兼容)。但是我有我希望ContentProvider 在用于覆盖call 方法之前准备的东西。然后我在我的Application.onCreate() 中做getContentResolver().call(BASE_URI, METHOD, null, Bundle.EMPTY)。本质上,它将这些东西推迟到创建我的Application 之后,这是我们期望ContentProvider 的onCreate 自然地做的事情。
【讨论】: