2012-03-26 15 views

答えて

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

+0

17 apisで生き延びました))機能のGoogleではこの操作のためのAPIを提供しているかもしれませんが、現在は機能しています。返信ありがとうございます! – pleerock

+1

このソリューションは機能しますが、完全に機能するわけではありません。たとえば、 'Context.getMainLooper()'メソッドは 'Application.onCreate()'の前に呼び出されると 'null'を返します。 – Michael

10

と呼ばれることになる。しかし、私は、コンテンツプロバイダが起動されます前に、いくつかの操作をしたい前に...コンテンツプロバイダののonCreateメソッドは

私の知る限りで呼ばれることになる前に、それは不可能です。 ContentProvideronCreate()がコードを実行する最初の機会になります。プロセスがフォークされた後の瞬間です。私が正しく理解するならば、onCreate()Applicationで呼び出される前でさえ、それが起こります。

+0

非常に悲しいです。アプリケーションのonCreateをオーバーライドしようとしましたが、アプリケーションのonCreateの前にコンテンツプロバイダがロードされているようです。答えてくれてありがとう。 – pleerock

3

を作成した私のソリューションは、call(Uri, String, String, Bundle) API(そう、それは完全な下位互換性はありません)を使用する必要があります。しかし、私はそのcallメソッドのオーバーライドで使用される前に、ContentProviderを準備する必要があるものを持っています。それから私はを私のApplication.onCreate()に入れます。本質的には、Applicationが作成されるまで、それは私たちがContentProvideronCreateが自然にやっていると予想していたものになるまで、それを守ります。

関連する問題