1

Ich baue eine Android-Bibliothek mit einigen Funktionen, die von Drittanbieter-Apps verwendet werden. Innerhalb meiner Bibliothek muss ich auf netzwerkbezogene Daten zugreifen und muss auf Context.getSystemService() zugreifen, um ConnectivityManager zu erhalten. Für z.B. -Zugriff auf ConnectivityManager in einer Bibliothek ohne Aktivität oder Kontext

ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));

Das Problem ist, dass ich keine Aktivitätsklasse haben, zu bekommen Kontext aus. Also 2 Fragen -

  1. Gibt es eine Möglichkeit, den Kontext der Aktivität zu erhalten, von dem meine Bibliotheksmethode aufgerufen wurde?
  2. Ist es eine gute Praxis, die App (Aufruf meiner Bibliothek) zu bitten, den Aktivitätskontext der App an eine Bibliothek eines Drittanbieters weiterzuleiten?

Vielen Dank!

+0

Übergeben Sie 'context' in Konstruktor oder Methode Parameter –

+0

Es muss nicht unbedingt eine Aktivität sein. Sie können den Anwendungskontext ebenfalls übergeben. SO kann in Ihrer Bibliothek Initialisierung sein, wenn Sie den Anwendungskontext verwenden, dann nutzen Sie die – ifiok

+0

difyzz - Muss es noch von der aufrufenden App übergeben werden? Oder kann ich es in meiner Klasse selbst bekommen? – snakepitbean

Antwort

1

Im Idealfall sollten Sie niemals einen Kontext übergeben, um eine Ressource abzurufen. Sie sollten die Ressource selbst übergeben (in diesem Fall den ConnectivityManager). Wenn das nicht praktikabel ist (weil Sie mehrere Ressourcen benötigen oder von Zeit zu Zeit neu geladen werden müssen) oder die Ressource selbst an den Lebenszyklus des Kontexts gebunden ist und der Anwendungskontext nutzlos ist, sollten Sie den Kontext übergeben, aber auch Machen Sie es möglich, die Referenz bei Bedarf zu löschen, damit Sie Lecks und Abstürze vermeiden können. Fügen Sie beispielsweise eine setContext (Kontextkontext) -Methode hinzu und setzen Sie den Kontext beim Verlassen der Aktivität auf null. Ist nicht gerade schön, aber angesichts der Tatsache, dass Sie nicht die Aktionen des Benutzers kontrollieren, ist es die sicherste Wette. Eine ähnliche Option wäre das Löschen des Bibliotheksobjektverweises, aber das würde keine Operationen stoppen, die Ihre Bibliothek bis zum nächsten Durchlauf des GC mit dem Kontext durchführen könnte. Denken Sie daran, dass Ihre App, auch wenn Ihre Bibliothek im Hauptthread aktiv ist, jederzeit in den Hintergrund gesendet werden kann.

Verwandte Themen