Android 使用Parcelable接口在进程间传递对象

Android在使用Intent打开一个Activity,Service时,发生了进程的切换。如果我们想要将一个自己的对象通过Intent传递给另一个Activity,Service的话,我们就需要用到Parcelable接口。
Parcelable接口的作用是将我们的对象序列化到一个Parcel对象中,Parcel对象中的writeXX()方法是C++实现的,可以将写入的数据写到字节流中。

下面以一个非常简单的demo来展示Parcelable的使用方法:
1. 首先我创建了两个Activity:MainActivity和ShowActivity。MainAcitivity用于创建要传递的对象,并且通过Intent开始ShowActivity。而ShowActivity则包含了一个TextView,用于显示传递过来的对象。

2. 我创建的类叫CA,实现Parcelable接口:
<span style="font-size:18px;">package com.liushenming.parceltest;

import android.os.Parcel;
import android.os.Parcelable;

/**
* Created by Administrator on 2015/2/10.
*/
public class CA implements Parcelable{

    private String A;
    private String B;
    private int C;

    public CA(String a,String b,int c){
            A=a;
            B=b;
            C=c;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(A);
        dest.writeString(B);
        dest.writeInt(C);
    }

    public static final Creator<CA> CREATOR= new Creator<CA>() {
        @Override
        public CA createFromParcel(Parcel source) {
            String A_get=source.readString();
            String B_get=source.readString();
            int C_get=source.readInt();
            return (new CA(A_get,B_get,C_get));
        }

        @Override
        public CA[] newArray(int size) {
            return new CA[0];
        }
    };

    @Override
    public String toString() {
        return "CA{" +
                "A='" + A + '\'' +
                ", B='" + B + '\'' +
                ", C=" + C +
                '}';
    }
}</span>
其中 public void writeToParcel(Parcel dest, int flags)用于进行将CA对象的每个成员写如Parcel中,而public static final Creator<CA> CREATOR这个静态成员则是Parcelable.Creator<T>接口的匿名实现类的对象,它必须要是public static final 类型并且必须要取名为CREATOR,因为反序列化是要调用该对象的 public T createFromParcel(Parcel source) 方法来还原CA对象。

3. 直接贴一下两个活动的onCreate()方法:
MainActivity:
<span style="font-size:18px;">@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent=new Intent();
        intent.setClass(MainActivity.this,ShowActivity.class);
        CA ca=new CA("a","b",1);
        intent.putExtra("ca",ca);
        startActivity(intent);
    }</span>


ShowActivity:
<span style="font-size:18px;">TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show);
        tv= (TextView) findViewById(R.id.tv_show);
        if(getIntent()!=null){
            CA ca_get=getIntent().getParcelableExtra("ca");
            tv.setText(ca_get.toString());
        }
    }</span>


4. 程序运行的结果就是,CA对象ca以parcelable的身份传到了ShowActivity中,并且经过CREATOR public CA createFromParcel(Parcel source)方法还原成了CA对象并显示在了TextView中:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值