Was ist der Unterschied zwischen Parcelable und Serialization in Android verwendet

Ich möchte genau wissen,

  1. Ob ich die parcelable - oder -Serialisierungs -Technik verwenden sollte um Daten von einer Aktivität zu anderen zu senden?
  2. ist es obligatorisch zu Verwenden Sie einen von ihnen zum Senden von Daten von einem zum anderen?
  3. Wann sollte ich sie benutzen?
  4. und der genaue Unterschied zwischen ihnen und der Leistung von beiden in Java-Aspekten.

Danke im Voraus.


 public class GetSetClass implements Serializable {
    private int dt = 10;

    /** pass any object, drwabale */
    public int getDt() {
        return dt;
    }

    public void setDt(int dt) {
        this.dt = dt;
    }
}
32
hinzugefügt bearbeitet
Ansichten: 1
Was ist die Notwendigkeit der Serialisierung von Objekten in Android? dürfen wir die Aufgabe nicht ausführen, ohne die Objekte zu serialisieren?
hinzugefügt der Autor SRam, Quelle
hinzugefügt der Autor verisimilitude, Quelle
Verwenden Sie Großbuchstaben, um einen Klassennamen zu beginnen ( GetSetClass oder Getsetclass ).
hinzugefügt der Autor keyser, Quelle

5 Antworten

Diese Konzepte beziehen sich auf Inter Process Communication (IPC).

Wenn Daten zwischen zwei Anwendungen gesendet werden, müssen wir sicherstellen, dass beide Anwendungen das Format der gesendeten Daten verstehen.

Insbesondere wenn Sie nicht primitive Datentypwerte wie Klassen und Objekte zwischen zwei Anwendungen senden, müssen wir sie in das für das Betriebssystem verständliche Format konvertieren. O.S versteht nur primitive Typen (Ints, Zeichen usw.). Der Grund für die Konvertierung ist, dass wir den Kommunikationskanal O.S zur Übertragung der Daten verwenden müssen.

Dieser Prozess des Umwandelns von nicht-primitiven Typen in Grundelemente und das Senden an andere Anwendungen über einen Kommunikationskanal wird als Serialisierung bezeichnet. Der umgekehrte Vorgang wird als De Serialisierung bezeichnet.

In Java hängt IPC stark von Serialisables für die Serialisierung ab. Die Serialisierung wurde jedoch entwickelt, um Desktopanwendungen zu berücksichtigen. Wenn Sie IPC in mobilen Anwendungen durchführen, müssen wir sicherstellen, dass der Prozess von IPC nicht zu schwer ist.

Serialisierung ist einfach ein schweres Konzept für IPC. Anstelle von Serialisierung entschied sich Android für Binders, um eine leichte Interprozesskommunikation zu erreichen. Binders hängt intern stark von Paketen ab, um den IPC zu machen. Pakete sind leichte serializables. Es wird bevorzugt, Pakete zum Marshallen von Objekten in Byteströme zu verwenden.

Hinweis: Binder IPC hängt stark vom Shared-Memory-Konzept ab, um sicherzustellen, dass bei der gemeinsamen Nutzung von Anwendungen nicht viel Datenduplikation auftritt.

25
hinzugefügt
Ich habe keine Ahnung, warum diese Antwort bis jetzt keine Aufwertung hat, sie ist ziemlich komplett und um ehrlich zu sein, eine der Besten für mich.
hinzugefügt der Autor GoRoS, Quelle
@vsvankhede Nun, es scheint, es gibt eine Zeit und einen Ort für alles und derzeit ist es der am meisten Ups.
hinzugefügt der Autor GoRoS, Quelle

Ob ich eine Parcelable- oder Serialisierungstechnik verwenden sollte, um Daten von einer Aktivität an eine andere zu senden.

Wenn Sie Daten/Objekte eines nicht-primitiven Typs über den intent an eine andere Aktivität senden, müssen Sie entweder Serialize oder Parcelable für dieses Objekt implementieren . Die bevorzugte Technik ist Parcelable , da sie die Leistung nicht beeinträchtigt.

ist es zwingend erforderlich, einen von ihnen zu verwenden, um Daten von einem zum anderen zu senden./Wann sollte ich sie verwenden?

Es wird nur zum Senden von nicht primitiven Datenobjekten benötigt.

und der genaue Unterschied zwischen ihnen und der Leistung von beiden in Java-Aspekten.

Serialization does impact the performance. For more details check this link Android Parcelable and Serializable

19
hinzugefügt
@hi arun George, .. warum sollte ich die Serialisierung nur für nicht-primitive Datentypen verwenden? und warum ist es nur für nicht-primitive Datentypen obligatorisch?
hinzugefügt der Autor SRam, Quelle
ok danke für die Beantwortung einer weiteren Frage ..wenn sollten wir Bundle für das Senden von Daten verwenden und was ist die Notwendigkeit, Objekt in Bundle intent.putExtras (String-ID, PRIMITIVE_DATA_TYPE) zu setzen, wenn wir Serialisierung für das Senden von Daten verwenden.
hinzugefügt der Autor SRam, Quelle
Primitive Datentypen können mit intent.putExtras (String-ID, PRIMITIVE_DATA_TYPE) von einer Aktivität an eine andere übergeben werden und in der anderen Aktivität mit der Entsprechung getMethod() für diesen Typ aufgerufen werden. Dies ist jedoch bei benutzerdefinierten Datentypen nicht der Fall. Daher müssen Sie entweder Serialisierung oder Parcelable verwenden.
hinzugefügt der Autor Arun George, Quelle

Hat eine sehr gute Erklärung für den Unterschied zwischen Parcelable und Serialisierung.

Um mit Ihrer Frage zu beginnen, obwohl es lange her ist, kann es anderen helfen:

      
  1. Ob ich Parzellierungs- oder Serialisierungstechniken für das Senden von Daten von einer Aktivität zu anderen verwenden sollte?
  2.   

Antwort: Parcelable ist die beste Wahl (warum später erklärt).

      
  1. ist es obligatorisch, einen von ihnen zu verwenden, um Daten von einem zu anderem zu senden?
  2.   

Antwort: Ja, das Senden von Daten (Objekten) von einem zum anderen erfordert das Schreiben und Abrufen von Byteströmen, und dies kann entweder durch Parzellieren oder durch Serialisierung erfolgen.

      
  1. Wann sollte ich sie verwenden?
  2.   

Antworten: Dieser Teil wurde bereits beantwortet, d. H. Daten von einer Aktivität an eine andere weitergegeben.

      
  1. und der genaue Unterschied zwischen ihnen und der Leistung beider in Java-Aspekten.
  2.   

Antwort: 1. Parcelable ist im Android SDK gut dokumentiert. Serialisierung ist dagegen in Java verfügbar.

  1. In Parcelable schreiben Entwickler benutzerdefinierten Code für Marshalling und Unmarshalling, sodass im Vergleich zur Serialisierung weniger Garbage-Objekte erstellt werden. Die Leistung von Parcelable gegenüber Serialisierung verbessert sich aufgrund dieser benutzerdefinierten Implementierung drastisch (etwa zwei Mal schneller).

  2. Die Serialisierung ist eine Markierungsschnittstelle, was bedeutet, dass der Benutzer die Daten nicht entsprechend ihren Anforderungen verwalten kann. Bei der Serialisierung wird eine Marshalling-Operation auf einer Java Virtual Machine (JVM) mithilfe der Java-Reflektions-API ausgeführt. Dies hilft bei der Identifizierung des Members und des Verhaltens von Java-Objekten, führt aber auch dazu, dass viele fehlerhafte Objekte erstellt werden. Aus diesem Grund ist der Serialisierungsprozess im Vergleich zu Parcelable langsam.

Answer taken from: this link

See also:serialization explained

5
hinzugefügt

Java Serializable:- Serializable comes from standard Java and is much easier to implement all you need to do is implement the Serializable interface and add override two methods.
The problem with Serializable is that it tries to appropriately handle everything under the sun and uses a lot reflection to make determine the types that are being serialized. So it becomes a beefy Object.

Androids Parcelable:- Android Inter-Process Communication (AIPC) file to tell Android how is should marshal and unmarshal your object.It is less generic and doesn't use reflection so it should have much less overhead and be a lot faster.

Read More from http://www.3pillarglobal.com/blog/parcelable-vs-java-serialization-android-app-development

3
hinzugefügt
Das Hervorheben des Problems mit der Serialisierung gibt dieser Antwort meine +1
hinzugefügt der Autor Richard Le Mesurier, Quelle

Sowohl das Parzellieren als auch das Serialisieren sind Möglichkeiten, Daten zu marshallen und zu entpacken. In android wird dies verwendet, um nicht primitive Datentypen zwischen Komponenten und Prozessen zu übergeben. im Allgemeinen erlaubt Android, entweder serialisierbare oder parzellierbare Objekte, so dass Sie Ihre Methode wählen können. Die Ausnahme dazu bilden AIDL-Schnittstellen. Objekte müssen parzellierbar sein, damit sie übergeben/zurückgegeben werden können.

Serialisierung verwendet Reflektion, um Daten automatisch zu marshallen und zu entpacken. In den meisten Fällen genügt es, die Marker-Schnittstelle zu implementieren, damit es einfach funktioniert. Beim Parzellieren müssen Sie den Code an Marshall schreiben und die Daten selbst entpacken.

Deshalb ist das Parzellieren schneller. Das Objekt muss nicht reflektiert werden, um die Felder zu erkennen. es ist die Reflexion, die es langsam macht.

Serialisierung hat auch eingebaute Versionierung ... Wenn Sie versuchen, auf eine andere Version der Klasse des Objekts, die gemarshallt wurde, zu entpacken, wird der Prozess in einer vorhersehbaren Weise fehlschlagen. Beim Parzellieren können Sie dasselbe tun, aber Sie müssen es selbst implementieren, indem Sie Ihrem Objekt ein "Versionsfeld" hinzufügen und einen Code, der die Version beim Unmarshaling überprüft.

Davon abgesehen verwende ich normalerweise Serialisierung. Mit einfachen Objekten werden Sie den Unterschied nicht bemerken. Sie können das Parceling später in der Entwicklung ändern, wenn Sie Leistungsprobleme feststellen.

2
hinzugefügt