2012-03-26 15 views

Odpowiedz

24

Myślę, że znalazłem rozwiązanie. Ive stworzył moją klasę niestandardowych aplikacji i zastąpiona metodą 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

To może działać w tej chwili, ale nie wiem, czy będzie niezawodne w różnych wersjach. – CommonsWare

+0

Przeżył przez 17 miesięcy)) Może w funkcji Google dostarczy nam żadnych apis do tej operacji, ale na razie działa. Dziękuję za odpowiedź! – pleerock

+1

To rozwiązanie działa, ale nie jest w pełni funkcjonalne. Na przykład metoda 'Context.getMainLooper()' zwraca 'null' po wywołaniu przed' Application.onCreate() '. – Michael

10

Ale chcę dokonać pewnych operacji przed dostawca treści rozpocznie ... zanim metoda onCreate dostawca treści byłby nazwać

AFAIK, że nie jest to możliwe. onCreate() z Twojej ContentProvider będzie pierwszą okazją, musisz uruchomić kod, chwile po procesie jest rozwidlony. To zdarza się jeszcze przed wywołaniem onCreate() na Application, jeśli dobrze rozumiem.

+0

jest to bardzo smutne. Ive starał się przesłonić onCreate of application, ale wydaje się, że dostawca treści ładuje przed onCreate of application też. Dziękuję za odpowiedź. – pleerock

3

Moje rozwiązanie wymaga użycia call(Uri, String, String, Bundle) API (tak, to nie jest w pełni kompatybilne wstecz). Ale mam rzeczy, które chcę, aby ContentProvider przygotować, zanim zostaną użyte w moim zastąpieniu tej metody call. Potem robię getContentResolver().call(BASE_URI, METHOD, null, Bundle.EMPTY) w moim Application.onCreate(). Zasadniczo, odradza to, dopóki nie powstanie moje Application, czego oczekiwaliśmy, że robimy to naturalnie.

Powiązane problemy