あるアクティビティから別のアクティビティに任意のオブジェクトのインテントを送信するには、Parcelable Interface または Serializable Interface を使用できます。2つの違いは何ですか?どちらを使用するのが好ましいですか?
さらに、このインターフェイスをすべて使用しなくても、文字列、整数型のオブジェクトを送信できます。それはどのように可能ですか?
あるアクティビティから別のアクティビティに任意のオブジェクトのインテントを送信するには、Parcelable Interface または Serializable Interface を使用できます。2つの違いは何ですか?どちらを使用するのが好ましいですか?
さらに、このインターフェイスをすべて使用しなくても、文字列、整数型のオブジェクトを送信できます。それはどのように可能ですか?
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 に指示します。汎用性が低く、リフレクションを使用しないため、オーバーヘッドがはるかに少なくなり、はるかに高速になります。
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"));
これで問題が解決することを願っています... :)
オブジェクトを送信する代わりに、コンテンツを指す URI を送信する方が簡単な場合があります。これにより、送信が簡素化され、オブジェクトを送信する必要がなくなります。これは、URI が理想的には関心のあるコンテンツを指すためです。もちろん、これは渡そうとしているコンテンツによって異なります。
そのリンクから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);