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

来源:互联网 发布:软件外包管理流程 编辑:程序博客网 时间:2024/06/06 12:31

小序

继上一篇博客,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 0
原创粉丝点击