Kontext in der Android-Bibliothek abrufen

8

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:

  • Lassen Sie meine Bibliotheksklassen Application verlängern und rufen Sie getApplicationContext() auf
    • Dies wird generell nicht empfohlen
  • Lassen Sie meine Bibliotheksklassen jeweils das Singleton-Muster implementieren und lassen Sie jeden Aufrufer jedes Mal einen Context übergeben, wenn sie einen Verweis auf den Singleton erhalten.
    • Dies erfordert, dass jeder Aufrufer den Anwendungskontext vor der Verwendung der Bibliothek abruft. Außerdem muss der Aufrufer eine -Instanz der Bibliothek aufrufen und nicht statische Methoden, die in der Bibliotheksklasse definiert sind (und somit auch) erfordert ferner, einen Hinweis auf diese Instanz zu halten).
joshlf 11.01.2014, 23:57
quelle

3 Antworten

10
  

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.

    
CommonsWare 12.01.2014 00:06
quelle
1

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.

Ссылка

    
Droid Teahouse 01.09.2017 00:54
quelle
0

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.

    
winsontan520 05.04.2017 13:48
quelle