您的位置:首页 > 移动开发 > Android开发

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

2015-04-14 16:53 417 查看

小序

继上一篇博客,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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: