Wie wir wissen, Content-Provider lädt auf Anwendung ausgeführt. Aber ich möchte einige Operationen ausführen, bevor der Inhaltsanbieter gestartet wird. Wie erfasse ich diese Operation? Bevor onCreate Methode des Content-Provider genannt würdeWie kann ich Content Provider initialisieren?
Antwort
Ich denke, ich habe eine Lösung gefunden. Ive erstellt meine benutzerdefinierte Anwendungsklasse und außer Kraft gesetzt attachBaseContext Methode
<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
}
}
Aber ich möchte einige Operationen, bevor Content-Provider startet ... Bevor onCreate Methode des Content-Provider würde
AFAIK genannt werden, ist das nicht möglich. onCreate()
Ihrer ContentProvider
wird die erste Möglichkeit sein, die Sie Code ausführen müssen, Momente, nachdem Ihr Prozess verzweigt ist. Das passiert schon bevor onCreate()
auf Application
aufgerufen wird, wenn ich das richtig verstehe.
ist es sehr traurig. Ich habe versucht, OnCreate der Anwendung zu überschreiben, aber es scheint, dass Content-Provider vor onCreate der Anwendung auch lädt. Danke für die Antwort. – pleerock
Meine Lösung Nutzung des call(Uri, String, String, Bundle)
API erfordert (so, es ist nicht vollständig rückwärtskompatibel). Aber ich habe die Sachen, die ich die ContentProvider
vorbereiten möchte, bevor es in meiner Überschreibung dieser call
Methode verwendet wird. Dann mache ich getContentResolver().call(BASE_URI, METHOD, null, Bundle.EMPTY)
in meinem Application.onCreate()
. Im Wesentlichen, es wird dieses Zeug bis nach meinem Application
wird erstellt, was wir erwartet, dass die ContentProvider
onCreate
natürlich tun.
Das mag im Moment funktionieren, aber ich weiß nicht, ob es in allen Versionen zuverlässig sein wird. – CommonsWare
Es hat über 17 apis überlebt)) Vielleicht in der Funktion Google wird uns irgendwelche Apis für diese Operation zur Verfügung stellen, aber für den Moment funktioniert es. Danke für deine Antwort! – pleerock
Diese Lösung funktioniert, ist jedoch nicht voll funktionsfähig. Zum Beispiel gibt die 'Context.getMainLooper()' Methode 'null' zurück, wenn sie vor 'Application.onCreate() 'aufgerufen wird. – Michael