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
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
}
}
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.
è 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
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.
Potrebbe funzionare al momento, ma non so se sarà affidabile tra le versioni. – CommonsWare
È sopravvissuto su 17 apis)) Forse nella funzione google ci fornirà qualsiasi apis per questa operazione, ma per ora funziona. Grazie per la risposta! – pleerock
Questa soluzione funziona, tuttavia non è completamente funzionante. Ad esempio, il metodo 'Context.getMainLooper()' restituisce 'null' quando chiamato prima di' Application.onCreate() '. – Michael