Android -- 序列化Parcelable与Serializable区别及用法

小序

继上一篇博客,http://blog.csdn.net/gaopeng0071/article/details/45043967说到的对象传递,对象类实现了Serializable接口。
Serializable接口,是java api提供的接口,实现此接口不需要我们做任何操作,java会自动帮我们进行序列化。
Parcelable接口,是Android提供的接口,实现此接口我们需要取实现接口方法。
两者区别:
Serializable,用起来简单,但是性能低。
Parcelable,需要自己编写实现类,但是速度快对Android平台支持比Serializable稳定,Android平台开发此接口是首选。

用法

对象类代码,代码中实现了writeToParcel、describeContents,以及实现了Creator类的createFromParcel和newArray方法,

package com.example.testapp;

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

//public class User implements Serializable {
public class User implements Parcelable {

    protected static final User[][] User = null;
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(getName());
        dest.writeInt(getAge());
    }

    public static final Creator<User> CREATOR = new Creator<User>() {

        @Override
        public User createFromParcel(Parcel source) {
            // TODO Auto-generated method stub
            return new User(source.readString(), source.readInt());
        }

        @Override
        public User[] newArray(int size) {
            // TODO Auto-generated method stub
            return User[size];
        }
    };
}

A和B的Activity变化不大,只有B在获取对象的时候使用getParcelableExtra方法。
A代码如下

package com.example.testapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;

public class AMainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_amain);

        findViewById(R.id.button1).setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent i = new Intent(AMainActivity.this,
                                BMainActivity.class);
                        i.putExtra("user", new User("lijingwei", 25));
                        startActivity(i);
                    }
                });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.amain, menu);
        return true;
    }

}

B代码如下

package com.example.testapp;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;

public class BMainActivity extends Activity {

    private TextView t;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bmain);
        t = (TextView) findViewById(R.id.tv);
        Intent i = getIntent();
//      User user = (User) i.getSerializableExtra("user");
        User user = (User) i.getParcelableExtra("user");
        t.setText("name=" + user.getName() + ",age=" + user.getAge());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.bmain, menu);
        return true;
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值