Xamarin.Forms: Forms.Context ist veraltet

9

Die neue veraltete Warnung in Xamarin.Forms 2.5 hat mich wirklich verwirrt. Welchen Kontext sollte ich in Abhängigkeitsdiensten verwenden, um z. B. GetSystemService () aufzurufen?

Soll ich in einem statischen Feld den Aktivitätskontext speichern, gegen den die Xamarin-Formulare initialisiert wurden?

Sollte ich die android Application-Klasse überschreiben und ihren Kontext verwenden?

Soll ich GetSystemService bei Aktivität erstellen und irgendwo speichern?

    
Anton Duzenko 17.11.2017, 15:24
quelle

1 Antwort

17

Ich hatte das gleiche Problem mit mehreren Dependency Services

Die einfachste Lösung

In vielen Fällen für Anwendungen mit einer einzelnen Aktivität

%Vor%

Kann durch

ersetzt werden %Vor%

Der Hintergrund im Detail

Android.App.Application.Context liefert den globalen Anwendungskontext des aktuellen Prozesses, der mit dem Lebenszyklus der Anwendung verknüpft ist, im Zusammenhang mit einem Aktivitätskontext.

Ein typisches Beispiel für die Verwendung des Anwendungskontexts ist das Starten einer Aktivität, z. B.

%Vor%
  

Die allgemeine Faustregel ist die Verwendung des aktuellen Aktivitätskontexts, sofern Sie dies nicht benötigen   um einen Verweis auf einen Kontext von einem Objekt zu speichern, das außerhalb Ihres existiert   Aktivität. In diesem Fall verwenden Sie den Anwendungskontext

Warum ist Forms.Context veraltet?

Xmarin.Forms 2.5 hat eine neue Funktion zum Einbetten von Formularen eingeführt, die Forms-Seiten in Xamarin.iOS / Xamarin.Android-Apps einbetten kann. Da Xamarin.Android-Apps jedoch mehrere Activities verwenden können, besteht die Gefahr, dass Xamarin.Android Benutzer Forms.Context aufrufen und einen Verweis auf MainActivity erhalten, was möglicherweise Probleme verursacht.

Die Arbeit um

Innerhalb eines Renderers erhalten Sie nun einen Verweis auf den Kontext der Ansicht, der an den Konstruktor übergeben wird.

Bei jeder anderen Klasse stehen Sie vor dem Problem, wie Sie den Aktivitätskontext erhalten. In einer einzelnen Aktivitätsanwendung (in den meisten Fällen) funktioniert Application.Context einwandfrei.

Um jedoch den aktuellen Aktivitätskontext in einer Mehrfachaktivitätsanwendung abzurufen, müssen Sie einen Verweis darauf halten. Die einfachste und zuverlässigste Methode hierfür ist eine class , die das Application.IActivityLifecycleCallbacks Interface implementiert.

  

Die Hauptidee besteht darin, einen Verweis auf den Kontext einer Aktivität beizubehalten   wird erstellt, gestartet oder fortgesetzt.

%Vor%

Mit dem obigen Ansatz können einzelne Aktivitätsanwendungen und mehrere Aktivitätsanwendungen jetzt immer auf den aktuellen / lokalen Aktivitätskontext zugreifen. B. statt sich auf den globalen Kontext zu verlassen

%Vor%

Kann jetzt durch

ersetzt werden %Vor%

Beispielaufruf in einem Abhängigkeitsdienst

%Vor%

Zusätzliche Ressourcen

Android.App.Application.IActivityLifecycleCallbacks

registerActivityLifecycleCallbacks

    
TheGeneral 18.11.2017, 06:49
quelle

Tags und Links