Ich schreibe eine Android-App, die einige Funktionen in einer internen Bibliothek enthalten hat. Damit diese Funktionalität funktioniert, benötigt die Bibliothek jedoch eine Instanz des Anwendungskontexts. Was ist der beste Weg, der Bibliothek diesen Kontext zu geben? Ich sehe ein paar Optionen, von denen keine ansprechend ist:
Application
verlängern und rufen Sie getApplicationContext()
auf
Context
übergeben, wenn sie einen Verweis auf den Singleton erhalten.
Was ist der beste Weg, der Bibliothek diesen Kontext zu geben?
Übergeben Sie Context
an die von Ihrer Bibliothek offengelegten Methoden, die ein Context
benötigen. Dies ist, was das Android SDK an Orten tut.
Oder ändern Sie Ihre Bibliothek, um Objekte, nicht statische Methoden verfügbar zu machen, und lassen Sie die Objekte eine Instanz von Context
(an den Konstruktor oder die Factory-Methode, die die Instanz erstellt hat) enthalten.
Lassen Sie meine Bibliotheksklassen die Anwendung erweitern und rufen Sie getApplicationContext ()
auf
Wenn Sie getApplicationContext()
für Context
aufrufen können, würden Sie das tun, ohne die Unterklasse Application
zu entfernen.
Dies ist eine Lösung, die ich gefunden habe, die ich nicht getestet habe, aber von Firebase verwendet wird, um das Erstellen einer init-Methode zu vermeiden:
"Was beim Start der Anwendung passiert, ist, dass es alle ContentProvider im System registriert (onCreate aufruft). Dies bedeutet, dass zu diesem Zeitpunkt noch keine Aktivität gestartet wurde, aber wir haben Zugriff auf den (Anwendungs-) Kontext initialisieren Sie unsere Bibliothek mit diesem Kontext "
Im Wesentlichen nutzen Sie den onCreate des leeren ContentProviders als Init. Es ist hacky, aber nahtlos.
Ich bin nicht sicher, Best Practice für diesen Fall, aber ich möchte den Kontext in meiner Singleton-Klasse während der Anwendung onCreate setzen.
%Vor%Warum? Wenn Sie zuvor Crashlytic / Fabric verwendet haben, werden Sie feststellen, dass sie
verwenden %Vor%Wenn Sie den Code in Fabric lesen, wird der Kontext in Fabric Singleton gespeichert.
Facebook Android SDK hat ähnliches gemacht:
%Vor%Wenn Sie ihre Codes durchsuchen, wird festgestellt, dass sie den statischen Kontext speichern.
Nun, welche sind die besten Praktiken? Ich bin mir nicht sicher, aber ich glaube, das sind tolle Entwickler, die großartige Bibliotheken erstellen, und sie haben darüber debattiert, bevor sie diese Bibliotheken herausgebracht haben. Jedenfalls lerne ich immer noch, wie man die beste Android-Bibliothek schreibt und auf diese Themen stößt.
Tags und Links java android shared-libraries singleton android-context