2

あるアクティビティから別のアクティビティに任意のオブジェクトのインテントを送信するには、Parcelable Interface または Serializable Interface を使用できます。2つの違いは何ですか?どちらを使用するのが好ましいですか?

さらに、このインターフェイスをすべて使用しなくても、文字列、整数型のオブジェクトを送信できます。それはどのように可能ですか?

4

4 に答える 4

3

Java Serializable: Serializable は標準の Java に由来し、Serializable インターフェイスを実装してオーバーライドする 2 つのメソッドを追加するだけで実装がはるかに簡単になります。

  private void writeObject(java.io.ObjectOutputStream out)
              throws IOException 
  private void readObject(java.io.ObjectInputStream in)
              throws IOException, ClassNotFoundException

Serializable の問題は、太陽の下ですべてを適切に処理しようとし、多くのリフレクションを使用してシリアル化されている型を決定することです。それで、それは頑丈なオブジェクトになります

Androids Parcelable: Android プロセス間通信 (AIPC) ファイルは、オブジェクトをマーシャリングおよびアンマーシャリングする方法を Android に指示します。汎用性が低く、リフレクションを使用しないため、オーバーヘッドがはるかに少なくなり、はるかに高速になります。

于 2012-08-07T10:05:54.847 に答える
2

String や Integer などのデータ型と、以下のように Parcelable インターフェースを実装したクラスのオブジェクトを送信できます...

Intent intent = new Intent(CallingActivity.this, CalledActivity.class);
intent.putExtra("IntegerExtra", intValue);
intent.putExtra("StringExtra", stringValue);
intent.putExtra("ParcExtra", parcObject);
startActivity(intent);

そして、受信側で次のコードを書くことができます。

intValue = getIntent().getIntExtra("IntegerExtra", 0);
stringValue = getIntent().getStringExtra("StringExtra");    
parcObject = ((YourParcalabeDataType) getIntent().getParcelableExtra("ParcExtra"));

これで問題が解決することを願っています... :)

于 2012-08-07T10:25:52.123 に答える
0

オブジェクトを送信する代わりに、コンテンツを指す URI を送信する方が簡単な場合があります。これにより、送信が簡素化され、オブジェクトを送信する必要がなくなります。これは、URI が理想的には関心のあるコンテンツを指すためです。もちろん、これは渡そうとしているコンテンツによって異なります。

于 2012-08-07T10:03:12.150 に答える
0

そのリンクからParcelableとSerializable Interfaceの違いを見つけることができます。基本的に、Parcelable は Android 用に作成されており、Serializable よりもはるかに効率的です。

バンドルを使用し、それらのバンドルをインテントにリンクすることで、文字列または整数を簡単に送信できます。

Intent i = new Intent(getApplicationContext(),YourClass.class);
Bundle b = new Bundle();
b.putString("string", "string");
i.putExtras(b);
startActivity(i);
于 2012-08-07T10:12:15.907 に答える