2012-03-26 12 views
17

Come sappiamo che il fornitore di contenuti carica durante l'esecuzione dell'applicazione. Ma voglio fare alcune operazioni prima del lancio del content provider. Come posso prendere questa operazione? Prima di metodo onCreate del provider di contenuti sarebbe chiamatoCome posso inizializzare il provider di contenuti?

risposta

24

Penso di aver trovato una soluzione. Ive ha creato la mia classe di applicazioni personalizzate e il metodo attachBaseContext override

<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

Potrebbe funzionare al momento, ma non so se sarà affidabile tra le versioni. – CommonsWare

+0

È sopravvissuto su 17 apis)) Forse nella funzione google ci fornirà qualsiasi apis per questa operazione, ma per ora funziona. Grazie per la risposta! – pleerock

+1

Questa soluzione funziona, tuttavia non è completamente funzionante. Ad esempio, il metodo 'Context.getMainLooper()' restituisce 'null' quando chiamato prima di' Application.onCreate() '. – Michael

10

Ma io voglio fare alcune operazioni prima di fornitore di contenuti lancerà ... Prima metodo onCreate del provider di contenuti sarebbe chiamato

per quanto ne so, questo non è possibile. onCreate() della tua ContentProvider sarà la prima occasione per eseguire il codice, pochi istanti dopo che il processo è stato biforcato. Ciò si verifica anche prima che onCreate() venga chiamato su Application, se ho capito bene.

+0

è molto triste. Ive ha provato a sovrascrivere onCreate dell'applicazione, ma sembra che il provider di contenuti venga caricato prima anche su onCreate dell'applicazione. Grazie per la risposta. – pleerock

3

La mia soluzione richiede l'utilizzo della call(Uri, String, String, Bundle) API (quindi, non è pienamente compatibile con le versioni precedenti). Ma ho le cose che voglio che lo ContentProvider si prepari prima che venga usato nella mia sostituzione di quel metodo call. Quindi faccio getContentResolver().call(BASE_URI, METHOD, null, Bundle.EMPTY) nel mio Application.onCreate(). Essenzialmente, rimuove le cose fino a quando non viene creato il mio Application, che è quello che ci aspettavamo che lo di ContentProvider facesse naturalmente.

Problemi correlati