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?
Ich hatte das gleiche Problem mit mehreren Dependency Services
In vielen Fällen für Anwendungen mit einer einzelnen Aktivität
%Vor%Kann durch
ersetzt werden %Vor% 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
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.
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.
%Vor%Die Hauptidee besteht darin, einen Verweis auf den Kontext einer Aktivität beizubehalten wird erstellt, gestartet oder fortgesetzt.
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%Tags und Links xamarin.forms