转载自:http://blog.csdn.net/wenxiang423/article/details/16332217
这个是Activity:
- package com.example.demo_app.paracble;
- import android.app.Activity;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.FrameLayout;
- public class ParacbleActivity extends Activity{
- FrameLayout mFrame ;
- Button mButton ;
- public static final String RECEIVER_PARCABLE = "android.paracble" ;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- mFrame = new FrameLayout(this);
- setContentView(mFrame);
- mButton = new Button(this);
- FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,FrameLayout.LayoutParams.WRAP_CONTENT);
- mButton.setLayoutParams(lp);
- mButton.setText("send");
- mFrame.addView(mButton);
- IntentFilter filter = new IntentFilter();
- filter.addAction(RECEIVER_PARCABLE);
- registerReceiver(mReceiver, filter);
- mButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent();
- intent.setAction(RECEIVER_PARCABLE);
- Person p = new Person();
- p.name = "wenxiang" ;
- p.age = 40 ;
- p.garde = 33 ;
- Son son = new Son();
- son.name = "myson" ;
- p.son = son ;
- String[] msg = new String[]{"msg1","msg2"};
- p.msg = msg ;
- intent.putExtra("value", p);
- sendBroadcast(intent);
- }
- });
- }
- protected void onDestroy() {
- super.onDestroy();
- unregisterReceiver(mReceiver);
- };
- BroadcastReceiver mReceiver = new BroadcastReceiver(){
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction() ;
- if(action.equals(RECEIVER_PARCABLE)){
- Person p = (Person)intent.getParcelableExtra("value");
- Log.d("Tag", "receiver person : "+p+" name : "+p.name+" , age : "+p.age+" , grade : "+p.garde+" , son "+p.son+" , msg : "+p.msg);
- }
- };
- };
- }
这个带有数组对象的Parcelable对象
- package com.example.demo_app.paracble;
- import android.os.Parcel;
- import android.os.Parcelable;
- import android.util.Log;
- public class Person implements Parcelable{
- public String name ;
- public int age ;
- public String[] msg ;
- public int garde ;
- public Son son ;
- @Override
- public int describeContents() {
- Log.v("Tag", " describeContents ");
- return 0;
- }
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- Log.v("Tag", this+" ------> writeToParcel "+flags);
- //这里是把对象的字段一个一个写到流里面,写的顺序要和下面读的顺序一摸一样
- dest.writeInt(age);
- dest.writeString(name);
- //这几句话是写数组的,因为数组的长度不确定,所以先确定数组长度,如果为空就不写,但是要把0 给发过去
- //让下面的好判断能不能读数组,也就是说下面如果读到的长度是0,那么就不读数组了,否则就创建相同长度的数组去读
- if(msg==null){
- dest.writeInt(0);
- }else{
- dest.writeInt(msg.length);
- }
- //如果数组为空,就可以不写
- if(msg!=null){
- dest.writeStringArray(msg);
- }
- dest.writeInt(garde);
- dest.writeParcelable(son, flags);
- }
- public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
- @Override
- public Person[] newArray(int size) {
- Log.w("Tag", " person new Array : "+size);
- return new Person[size];
- }
- @Override
- public Person createFromParcel(Parcel source) {
- //开始读对象的流顺序要和上面写的一样
- Log.w("Tag", " createFromParcel ");
- int age = source.readInt();
- String name = source.readString() ;
- //开始读数组的长度
- int length = source.readInt() ;
- Log.v("Tag", " length : "+length);
- String[] msg = null ;
- //如果数组长度大于0,那么就读数组, 所有数组的操作都可以这样。
- if(length>0){
- msg = new String[length];
- source.readStringArray(msg);
- }
- int grade = source.readInt() ;
- Son son = source.readParcelable(Son.class.getClassLoader());
- Log.i("Tag", " son : "+son);
- Person p = new Person();
- p.age = age ;
- p.name = name ;
- p.msg = msg ;
- p.garde = grade ;
- p.son = son ;
- Log.d("Tag", p + " -- > name : "+p.name +" , age : "+p.age+" , garde : "+p.garde+" , son : "+p.son+" , msg : "+p.msg+" length : "+length);
- return p ;
- }
- };
- }
这个是普通的Parcelable对象
- package com.example.demo_app.paracble;
- import android.os.Parcel;
- import android.os.Parcelable;
- public class Son implements Parcelable{
- public String name ;
- @Override
- public int describeContents() {
- return 0;
- }
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeString(name);
- }
- public static final Creator<Son> CREATOR = new Creator<Son>() {
- @Override
- public Son createFromParcel(Parcel source) {
- Son s = new Son();
- s.name = source.readString();
- return s;
- }
- @Override
- public Son[] newArray(int size) {
- return new Son[size];
- }
- };
- }