Übergeben von Objekten zwischen Aktivitäten in Android (Beispiel)

Passing einfache Datentypen (String, int, double, ... ect) zwischen Aktivitäten ist einfach. Wir können nur die sie mit eindeutigen Schlüsseln auf Vorsatz setzen und es zu einer anderen Aktivität senden.

Aber es ist etwas komplexer, wenn benutzerdefinierte Objekte zwischen den Aktivitäten übergeben. Dies ist der Ort, an dem die Serialisierung kommt.

Die Serialisierung wird die Umwandlung von Daten von einer schnellen, effizienten, internen Darstellung auf etwas, das in einem persistenten Speicher oder übertrug über ein Netzwerk gehalten werden kann.

Die Leistung von Parcel ist sehr hoch, wenn zu Serializable wegen seiner benutzerdefinierten Implementierung Vergleich

Es wird dringend empfohlen Parcel Implantation zu verwenden, wenn Objekte in Android-Serialisierung

Es folgt eine beispielhafte Implementierung von Parcel Objekt (Benutzer)

Dies ist ein einfaches Objekt, das teilnehmerbezogenen Daten hält. User-Objekt implementiert als Parcel.

Es gibt zwei Methoden von Parcel Schnittstelle describeContents und writeToParcel außer Kraft zu setzen. Tatsächliche Objektserialisierung in writeToParcel Methode tun.

# X000A;





# X000A; # x000A; # X000A; # x000A; # X000A; # x000A;
    # X000A;
  • Objekt müssen Parcelable.Creator haben. Dieses Feld ist für Android benötigt, um neue Objekte zu erstellen, die einzeln oder als Arrays # X000A;
# X000A; # x000A; # X000A; # x000A;
    # X000A;
  • Das User-Objekt ist ein einfaches parcelabel Objekt, kann es einige komplexere Objekte sein, für eine Instanz Sie ein Objekt, das ein anderes Objekt verweist. In einem solchen Szenario würden sie müssen beide Parcel sein







    Es folgt ein Beispiel von komplexeren Parcel Objekt (Sensor)

    # X000A; # x000A;
      # X000A;
    • # X000A; Sensor-Objekt enthält einige spezielle Felder # X000A;
    # X000A; # x000A; # X000A; # x000A;
      # X000A;
    • Wenn das Objekt des Sensors an das Paket Benutzer zu schreiben, verwendet es # X000A;
    # X000A; # x000A; # X000A; # x000A;
      # X000A;
    • Wenn das Objekt Benutzer das Lesen von Paket braucht es Klassenlader # X000A;
    # X000A; # x000A; # X000A; # x000A;
      # X000A;
    • Wenn die Benutzerliste zu schreiben (sharedUsers) auf das Paket, verwendet es # X000A;
    # X000A; # x000A; # X000A; # x000A;
      # X000A;
    • Wenn die Benutzerliste zu lesen (sharedUsers) von Paket braucht es User.CREATOR Instanz # X000A;
    # X000A; # x000A; # X000A; # x000A;
      # X000A;
    • Statt boolean Wert Paket zu schreiben, konvertieren wir es auf einen ganzzahligen Wert und speichern Sie es als eine ganze Zahl (da keine Methode booleans auf das Paket direkt zu schreiben) # X000A;
    # X000A; # x000A; # X000A; # x000A;
      # X000A;
    • Wenn der Booleschen Wert lesen, erhalten wir den Booleschen Wert aus der gespeicherten integer # X000A;
    # X000A; # x000A; # X000A; # x000A; # X000A; # x000A;
      # X000A;
    • In Ausgangsaktivität können wir das Parcel Objekt in eine Absicht gesetzt # X000A;
    # X000A; # x000A; # X000A; # x000A;
      # X000A;
    • In Ziel Aktivität können wir das Parcel Objekt aus Absicht Extras bekommen (Bündel) # X000A;
    # X000A; # x000A;

    Geschrieben von eranga Bandara

    Parcel sieht aus wie der beste Weg, es zu tun. Serializable die einfachste. Aber es gibt kein Entkommen, die Objekte als Statisten auf die Absicht, mit den Tasten hinzufügen zu müssen und wieder vom anderen Ende bekommen usw.

    vor mehr als 1 Jahr ·

    Wenn ich einige benutzerdefinierte Objekt zu übertragen, die auf ihren Inhalt dort andere Gegenstände sind, die von einem Drittanbieter-Integration sind (ja, ich kann sie Serializable oder Parcel zum Beispiel machen implementieren), kann dieser Ansatz nicht passieren. Es gibt einen anderen Ausweg?

    vor mehr als 1 Jahr ·

    vor mehr als 1 Jahr ·

    Auf beiden Arten Parcel oder Serializable, müssen wir zusätzliche Codes hinzufügen und noch Leistung und Speicher-Hit bekommen. vor allem, wenn wir komplexere Objekte beginnen vorbei ist dies eine ernsthafte Leistung getroffen werden kann.

    vor mehr als 1 Jahr ·







    In Verbindung stehende Artikel