如果自定义的类型需要通过Intent或IPC进行传递,就需要对数据进行序列化处理。
下面是Android官网上的一个例子
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
从以下例子可以看到一个基本类要实现序列化需要实现Parcelable接口,通过Parcel进行存储。实现Parcelable接口的类必须有一个名为:CREATOR 的静态字段,这是一个实现Parcelable.Creator接口的对象,这样一个自定义的类型就可以跟基本数据一样使用Intent进行传递。
使用Intent传递MyParcelable
工程目录
MainActivity.java
package com.example.parcelabledemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this, HandleActivity.class);
MyParcelable myParcelable = new MyParcelable(10);
Bundle bundle = new Bundle();
System.out.println("main " + myParcelable.get_data());
bundle.putParcelable("value", myParcelable);
intent.putExtras(bundle);
startActivity(intent);
}
});
}
}
package com.example.parcelabledemo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class HandleActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.handle);
Bundle bundle = getIntent().getExtras();
MyParcelable myParcelable = bundle.getParcelable("value");
System.out.println(myParcelable.toString());
Toast.makeText(this, "value = " + myParcelable.get_data(),
Toast.LENGTH_LONG).show();
}
}
一个类的序列化就完成了
参考资料:
http://developer.android.com/reference/android/os/Parcelable.html