2012-03-26 52 views
17

正如我們所知道的應用程序運行時的內容提供者加載。但我想在內容提供商啓動之前做一些操作。我如何捕捉這個操作?以前內容提供商的onCreate方法將被稱爲如何捕捉內容提供者初始化?

回答

24

我認爲我找到了解決方案。香港專業教育學院建立了我的自定義應用程序類和重寫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 
    } 
} 
+2

目前可能有效,但我不知道它是否可以跨越各個版本。 – CommonsWare 2012-03-26 16:42:30

+0

它在17 apis中倖存))也許在功能谷歌將爲我們提供此操作的任何apis,但現在它的作品。感謝您的回覆! – pleerock 2012-03-26 17:03:50

+1

該解決方案有效,但它不完全正常工作。例如,Context.getMainLooper()方法在Application.onCreate()之前調用時返回null。 – Michael 2012-07-27 10:46:17

10

但我想作一些操作之前,內容提供商將推出...在內容提供商的onCreate方法將被稱爲

據我所知,這是不可能的。您的ContentProvideronCreate()將是您的第一個機會,您必須運行代碼,在您的過程分叉後的瞬間。如果我理解正確,即使在Application上調用onCreate()之前也會發生這種情況。

+0

它很傷心。我試圖覆蓋應用程序的onCreate,但似乎內容提供者也在應用程序的onCreate之前加載。謝謝你的答案。 – pleerock 2012-03-26 14:21:05

3

我的解決方案需要使用call(Uri, String, String, Bundle) API(所以,它不是完全向後兼容)的。但是我有我想讓ContentProvider準備好的東西,然後將其用於覆蓋該call方法。然後我在我的Application.onCreate()中做getContentResolver().call(BASE_URI, METHOD, null, Bundle.EMPTY)。實質上,它將這些東西推遲到我的Application正在創建之後,這正是我們期望ContentProvideronCreate自然而然地做到的。