android提供了名为Parcel的类型。 用作封装数据的容器,封装的数据可以通过Intent或IPC传递。 除了基本类型以外,只有实现了Parcelable接口的类才能放入Parcel中。
Parcelable的实现要点:需要实现三件事
1 ) writeToParcel方法。 此方法将类的数据写入外部提供的Parcel。 宣言如下:
witetoParcel(Parceldest,int flags )具体参数的含义请参考javadoc
2 )描述内容方法。 不知道有什么用,总之可以直接回到0
3 )静态Parcelable.Creator接口。 这个界面有两种方法。
createfromparcel(parcelin )实现从in创建类实例的功能
newArray(intsize )只创建一个语句(return newt size )的数组,类型为t,长度为size。 估计该方法用于外部类的反序列化类数组。
测试的接收消息Activity:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
publicclasstestextendsactivity {
@Override
公共语音创建(bundlesavedinstancestate )。
super.oncreate (savedinstancestate;
setcontentview(r.layout.main );
Intent i=getIntent (;
personp=I.getparcelableextra (' yes );
system.out.println(----p.name );
system.out.print ln (---- p.map.size ) );
}
}
发送的Activity:
import java.util.HashMap;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
publicclasstestnewextendsactivity {
@Override
公共语音创建(bundlesavedinstancestate )。
super.oncreate (savedinstancestate;
setcontentview(r.layout.main );
Intent intent=new Intent (;
人员p=new人员(;
p.map=new HashMap (;
p.map.put('yes ',' ido ' );
p.name='ok ';
intent.putextra('yes ',p );
intent.setclass(this,Test.class;
开始活动(intent;
}
}
Parcelable的实现类:
import java.util.HashMap;
import android.os.Parcel;
import android.os.Parcelable;
publicclasspersonimplementsparcelable {
公共hashmap map=new hashmap (;
公共字符串名称;
@Override
公共说明内容(
返回0;
}
@Override
publicvoidwritetoparcel (parcel dest,int flags ) )。
dst.writemap(map;
dest.writestring(name;
}
publicstaticfinalparcelable.creator creator=newparcelable.creator {
重写创建器
@Override
PublicPersoncreatefromparcel{
人员p=new人员(;
p.map=source.read hashmap (hashmap.class.getclass loader () );
p.name=source.readString (;
返回p;
}
@Override
公共个人[ ] new array (intsize ) {
//todo自动生成方法stub
返回空值;
}
(;
}