Suche…


Einführung

Der Lebenszyklus von Xamarin.Android-Anwendungen entspricht der normalen Android-App. Wenn wir über den Lebenszyklus sprechen, müssen wir über den Anwendungslebenszyklus, den Aktivitätslebenszyklus und den Fragment-Lebenszyklus sprechen.

Im Folgenden werde ich versuchen, eine gute Beschreibung und Verwendung zu geben. Ich habe diese Dokumentation von der offiziellen Android- und Xamarin-Dokumentation und vielen hilfreichen Webressourcen erhalten, die im Abschnitt "Anmerkungen" unten aufgeführt sind.

Bemerkungen

Interessante Links zu einem umfassenden Wissen über den Lebenszyklus von Android-Anwendungen:

https://developer.android.com/reference/android/app/Activity.html

http://www.vogella.com/tutorials/AndroidLifeCycle/article.html

https://github.com/xxv/android-lifecycle

https://developer.android.com/guide/components/fragments.html

https://developer.xamarin.com/guides/android/platform_features/fragments/part_1__creating_a_fragment/

https://developer.android.com/guide/components/activities/activity-lifecycle.html

Lebenszyklus der Anwendung

Zunächst sollten Sie wissen, dass Sie die Android.Application-Klasse erweitern können, sodass Sie auf zwei wichtige Methoden zugreifen können, die sich auf den App-Lebenszyklus beziehen:

  • OnCreate - Wird beim Start der Anwendung aufgerufen, bevor andere Anwendungsobjekte erstellt wurden (wie MainActivity).

  • OnTerminate - Diese Methode wird in emulierten Prozessumgebungen verwendet. Es wird niemals auf einem Android-Produktionsgerät aufgerufen, bei dem Prozesse durch einfaches Abschalten entfernt werden. Dabei wird kein Benutzercode (einschließlich dieses Callbacks) ausgeführt. Aus der Dokumentation: https://developer.android.com/reference/android/app/Application.html#onTerminate ()

In der Xamarin.Android-Anwendung können Sie die Anwendungsklasse auf die unten dargestellte Weise erweitern. Fügen Sie Ihrem Projekt die neue Klasse "MyApplication.cs" hinzu:

[Application]
public class MyApplication : Application
{
    public MyApplication(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, ownerShip)
    {
    }

    public override void OnCreate()
    {
        base.OnCreate();
    }

    public override void OnTerminate()
    {
        base.OnTerminate();
    }
}

Wie Sie oben geschrieben haben, können Sie die OnCreate-Methode verwenden. Sie können hier beispielsweise die lokale Datenbank initialisieren oder eine zusätzliche Konfiguration einrichten.

Es gibt auch mehr Methoden, die überschrieben werden können: OnConfigurationChanged oder OnLowMemory.

Lebenszyklus der Aktivität

Der Lebenszyklus von Aktivitäten ist sehr viel komplexer. Wie Sie wissen, ist Aktivität eine einzige Seite in der Android-App, auf der Benutzer Interaktionen ausführen können.

In der folgenden Abbildung können Sie sehen, wie der Lebenszyklus von Android-Aktivitäten aussieht:

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen, gibt es einen bestimmten Ablauf des Aktivitätslebenszyklus. In der mobilen Anwendung gibt es natürlich in jeder Aktivitätsklasse Methoden, die ein bestimmtes Lebenszyklusfragment behandeln:

[Activity(Label = "LifecycleApp", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Log.Debug("OnCreate", "OnCreate called, Activity components are being created");

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.MainActivity);
    }

    protected override void OnStart()
    {
        Log.Debug("OnStart", "OnStart called, App is Active");
        base.OnStart();
    }

    protected override void OnResume()
    {
        Log.Debug("OnResume", "OnResume called, app is ready to interact with the user");
        base.OnResume();
    }

    protected override void OnPause()
    {
        Log.Debug("OnPause", "OnPause called, App is moving to background");
        base.OnPause();
    }

    protected override void OnStop()
    {
        Log.Debug("OnStop", "OnStop called, App is in the background");
        base.OnStop();
    }

    protected override void OnDestroy()
    {
        base.OnDestroy();
        Log.Debug("OnDestroy", "OnDestroy called, App is Terminating");
    }
}

Es gibt eine gute Beschreibung in der offiziellen Android-Dokumentation:

  • Die gesamte Lebensdauer einer Aktivität geschieht zwischen dem ersten Aufruf von onCreate (Bundle) bis zu einem einzigen letzten Aufruf von onDestroy (). Eine Aktivität führt alle Einstellungen des "globalen" Status in onCreate () durch und gibt alle verbleibenden Ressourcen in onDestroy () frei. Wenn beispielsweise ein Thread im Hintergrund ausgeführt wird, um Daten aus dem Netzwerk herunterzuladen, kann er diesen Thread in onCreate () erstellen und dann den Thread in onDestroy () stoppen.

  • Die sichtbare Lebensdauer einer Aktivität geschieht zwischen einem Aufruf von onStart () bis zu einem entsprechenden Aufruf von onStop (). Während dieser Zeit kann der Benutzer die Aktivität auf dem Bildschirm sehen, obwohl sie sich möglicherweise nicht im Vordergrund befindet und mit dem Benutzer interagiert. Zwischen diesen beiden Methoden können Sie Ressourcen verwalten, die benötigt werden, um dem Benutzer die Aktivität anzuzeigen. Sie können beispielsweise einen BroadcastReceiver in onStart () registrieren, um auf Änderungen zu prüfen, die Auswirkungen auf Ihre Benutzeroberfläche haben, und die Registrierung in onStop () aufheben, wenn der Benutzer nicht mehr sieht, was Sie anzeigen. Die Methoden onStart () und onStop () können mehrmals aufgerufen werden, wenn die Aktivität für den Benutzer sichtbar und verborgen ist.

  • Die Vordergrundlebensdauer einer Aktivität geschieht zwischen einem Aufruf von onResume () bis zu einem entsprechenden Aufruf von onPause (). Während dieser Zeit befindet sich die Aktivität vor allen anderen Aktivitäten und interagiert mit dem Benutzer. Eine Aktivität kann häufig zwischen den wiederaufgenommenen und den pausierten Zuständen wechseln - zum Beispiel, wenn das Gerät in den Ruhezustand versetzt wird, wenn ein Aktivitätsergebnis geliefert wird, wenn eine neue Absicht geliefert wird - der Code in diesen Methoden sollte daher recht leicht sein.

Fragment Lebenszyklus

Wie Sie wissen, können Sie eine Aktivität haben, in die jedoch verschiedene Fragmente eingebettet sind. Deshalb ist der Fragment-Lebenszyklus auch für Entwickler wichtig.

In der folgenden Abbildung können Sie sehen, wie der Lebenszyklus eines Android-Fragments aussieht:

Geben Sie hier die Bildbeschreibung ein

Wie in der offiziellen Android-Dokumentation beschrieben, sollten Sie mindestens drei Methoden implementieren:

  • OnCreate - das System ruft dies beim Erstellen des Fragments auf. Innerhalb Ihrer Implementierung sollten Sie die wesentlichen Komponenten des Fragments initialisieren, die Sie beibehalten möchten, wenn das Fragment angehalten oder angehalten und anschließend fortgesetzt wird.

  • OnCreateView - Das System ruft dies auf, wenn das Fragment zum ersten Mal seine Benutzeroberfläche zeichnen soll. Um eine Benutzeroberfläche für Ihr Fragment zu zeichnen, müssen Sie eine View aus dieser Methode zurückgeben, die der Stamm des Layouts Ihres Fragments ist. Sie können null zurückgeben, wenn das Fragment keine Benutzeroberfläche bereitstellt.

  • OnPause - Das System ruft diese Methode als ersten Hinweis auf, dass der Benutzer das Fragment verlässt (obwohl dies nicht immer bedeutet, dass das Fragment zerstört wird). Hier sollten Sie normalerweise Änderungen vornehmen, die über die aktuelle Benutzersitzung hinaus beibehalten werden sollten (da der Benutzer möglicherweise nicht zurückkommt).

Beispielimplementierung in Xamarin.Android:

public class MainFragment : Fragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your fragment here
        // You should initialize essential components of the fragment
        // that you want to retain when the fragment is paused or stopped, then resumed.
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // Use this to return your custom view for this Fragment
        // The system calls this when it's time for the fragment to draw its user interface for the first time.

        var mainView = inflater.Inflate(Resource.Layout.MainFragment, container, false);
        return mainView;
    }

    public override void OnPause()
    {
        // The system calls this method as the first indication that the user is leaving the fragment 

        base.OnPause();
    }
}

Natürlich können Sie hier zusätzliche Methoden hinzufügen, wenn Sie mit unterschiedlichen Zuständen umgehen möchten.

Vollständiges Beispiel auf GitHub

Wenn Sie ein Basisprojekt mit den unten beschriebenen Methoden erhalten möchten, können Sie die Xamarin.Android-Anwendungsvorlage von meinem GitHub herunterladen. Sie finden Beispiele für:

  • Anwendungslebenszyklus-Methoden
  • Aktivitätslebenszyklus-Methoden
  • Fragment-Lebenszyklusmethoden

https://github.com/Daniel-Krzyczkowski/XamarinAndroid/tree/master/AndroidLifecycle/LifecycleApp



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow