用意图传递对象序列化-- 实现Parcelable接口

我们都知道Intent是传递信息的介质,我们用他用的最多的就是从一个Activity转换到另一个Activity,并且顺带传递一些数据到下一个Activity中。但是如果我们传递过去的是一个包含很多信息的对象呢?这里就需要使用到Parcelable和Serializable这两个接口。 使用这两个接口的原因很简单,就是为了序列化对象!对象序列化有以下好处: 1.永久性保存对象,保存对象的字节序列到本地文件中 2.用过序列化对象在网络中传递对象 3.通过序列化对象在进程间传递对象 然后就是使用Parcelable接口的性能比Serializable的性能更好,而且Serizlizanble在对象序列化时会产生大量的临时变量,容易GC。推荐使用Parcelable接口。

先是一个实例类,实现Parcelable接口,重写两个方法。然后就是添加一个常量CREATOR,并且实现内部接口Pracelable.Creator,实现里面的两个方法:

public class Person implements Parcelable {

   public int age;// 年龄

   public String name;// 姓名

   @Override

   public String toString() {

      return "Person [age=" + age + ", name=" + name + "]";

   }

   public static final Parcelable.CreatorCREATOR = new Parcelable.Creator() {

      // 返回对象数组大小

      @Override public Person[] newArray(int size) {

         // TODO Auto-generated method stub

         return new Person[size];

       }

      // 读取信息

      @Override

      public Person createFromParcel(Parcel source) {

         // TODO Auto-generated method stub

         Person person = new Person();

         person.age = source.readInt();

         person.name = source.readString();

         return person;

      }

   };

   @Override

   public int describeContents() {

   // TODO Auto-generated method stub

   return 0;

   }

   // 写入信息

   @Override

   public void writeToParcel(Parcel dest, int flags) {

      // TODO Auto-generated method stub

      dest.writeInt(age);

      dest.writeString(name);

    }

}

然后就是MainActivity的代码了(这里注解的代码也是可以实现的,不需要bundle就直接传入Intent就可以传递对象。因为有这个方法Intent.putExtra(String name,Parcelable value)在,所以不用bundle也可以):

button1.setOnClickListener(new OnClickListener() {

   @Override public void onClick(View v) {

      // TODO Auto-generated method stub

      Intent intent = new Intent(MainActivity.this, SecondActivity.class);

      // 携带对象参数

      Person person = new Person();

      person.age = 21;

      person.name = "sdf";

      Bundle bundle = new Bundle();

      bundle.putParcelable("person", person);

      // intent.putExtra("msg", person);

      intent.putExtras(bundle); startActivity(intent);

   }

});

然后就是跳转接收的Activity的代码,都很简单,一看就懂 :


public class SecondActivity extends Activity {

   private TextView textView;

   @Override protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_second);

      textView = (TextView) findViewById(R.id.textview);

      Person person=new Person();

      Intent intent=getIntent();

      person=intent.getParcelableExtra("person");

      textView.setText(person.toString());

  }

}

你可能感兴趣的:(用意图传递对象序列化-- 实现Parcelable接口)