33

正確に知りたいのですが、

  1. あるアクティビティから別のアクティビティにデータを送信するために、parcelableまたはテクニックを使用する必要がありますか?serialization
  2. データを一方から他方に送信するためにそれらのいずれかを使用することは必須ですか?
  3. いつ使用する必要がありますか?
  4. そして、それらの正確な違いと、Java の側面における両方のパフォーマンス。

前もって感謝します。


 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;
    }
}
4

5 に答える 5

29

これらの概念は、プロセス間通信 (IPC) に関連しています。

2 つのアプリケーション間でデータを送信する場合、両方のアプリケーションが送信されるデータの形式を理解できるようにする必要があります。

特に、2 つのアプリケーション間でクラスやオブジェクトなどの非プリミティブ データ型の値を送信する場合は、それらをオペレーティング システムが理解できる形式に変換する必要があります。OS はプリミティブ型 (int、char など) のみを理解します。変換の理由は、データを送信するために OS 通信チャネルを使用する必要があるためです。

非プリミティブ型をプリミティブ型に変換し、何らかの通信チャネルを介して他のアプリケーションに送信するこのプロセスは、シリアライゼーションと呼ばれます。逆のプロセスは De Serialization と呼ばれます。

Java では、IPC はシリアル化のために Serializables に大きく依存しています。ただし、シリアル化は、デスクトップ アプリケーションを念頭に置いて設計されています。モバイル アプリケーションで IPC を実行する場合、IPC のプロセスが重すぎないようにする必要があります。

簡単に言えば、シリアライゼーションは IPC にとって重い概念です。そのため、シリアライゼーションの代わりに、軽量のプロセス間通信を実現するために Android はバインダーを選択しました。バインダーは、IPC を実行するために、内部的に小包に大きく依存しています。パーセルは軽量のシリアライズ可能です。オブジェクトをバイト ストリームにマーシャリングするには、パーセルを使用することをお勧めします。

注: Binder IPC は、共有メモリの概念に大きく依存して、アプリケーション間で共有する際にデータの重複があまりないようにします。

于 2013-12-04T12:57:52.217 に答える
19

あるアクティビティから別のアクティビティにデータを送信するために、パーセル可能またはシリアル化の手法を使用する必要があるかどうか。

非プリミティブ型のデータ/オブジェクトを別のアクティビティに送信する場合は、そのオブジェクトを実装intentするか、実装する必要があります。パフォーマンスに影響を与えないため、推奨される手法です。SerializeParcelableParcelable

あるデータから別のデータを送信するために、それらの1つを使用することが必須ですか。/いつ使用する必要がありますか。

これは、非プリミティブ型のデータオブジェクトの送信にのみ必須/使用されます。

そして、それらの正確な違いと、Javaの側面における両方のパフォーマンス。

シリアル化はパフォーマンスに影響を与えます。詳細については、このリンクを確認してくださいAndroid Parcelable and Serializable

于 2012-06-18T06:41:40.813 に答える