大家好,我是Bin,今天为大家分享一下Android中ParcelableSerializable的区别与使用。
大家都知道,这两个都是和序列化相关的接口,那么我先带大家普及一下有关序列化的基础知识。
一、序列化、反序列化是什么?
对象的序列化:Java对象转化 为字节流的过程;
对象的反序列化:字节流转化为Java对象的过程。
二、序列化的作用是什么?
Serializable的作用是为了保存对象的属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种
传输可以是程序内的也可以是两个程序间的。而Android的Parcelable的设计初衷是因为Serializable效
存中存在,Parcelable是通过IBinder通信的消息的载体。
三、两者的区别是什么?
由于Parcelable是在内存中操作数据而Serializable是在硬盘中进行IO操作,显然Parcelable效率要高
,占用内存小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据;而Serializable
可将数据持久化保存,所以在需要保存或网络传输数据时选择Serializable。
Android两个Activity之间传对象的Demo,这两个对象分别实现了Parceable和Serializable接口,下面
请看代码:

布局文件activity_mian.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"                xmlns:tools="http://schemas.android.com/tools"                android:layout_width="match_parent"                android:layout_height="match_parent"                tools:context=".MainActivity">    <Button        android:text="@string/title_activity_parceable"        android:id="@+id/par"        android:layout_marginTop="30dp"        android:layout_width="match_parent"        android:layout_height="wrap_content"/>    <Button        android:text="@string/title_activity_serializable"        android:layout_below="@+id/par"        android:layout_marginTop="20dp"        android:id="@+id/ser"        android:layout_width="match_parent"        android:layout_height="wrap_content"/>RelativeLayout>

布局文件activity_parceable.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"                xmlns:tools="http://schemas.android.com/tools"                android:layout_width="match_parent"                android:layout_height="match_parent"                tools:context="com.mobile.intent.ParceableActivity">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/text"        android:text="@string/hello_world"/>RelativeLayout>

布局文件activity_serializable.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"                xmlns:tools="http://schemas.android.com/tools"                android:layout_width="match_parent"                android:layout_height="match_parent"                tools:context="com.mobile.intent.SerializableActivity">    <TextView        android:id="@+id/text"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world"/>RelativeLayout>

Student.java实体类

package com.mobile.intent;import android.os.Parcel;import android.os.Parcelable;/** * Created by Bin. */public class Student implements Parcelable{    private String name;    private String phoneNum;    @Override    public int describeContents() {        return 0;    }    @Override    public void writeToParcel(Parcel dest, int flags) {        dest.writeString(name);        dest.writeString(phoneNum);    }    public static final Parcelable.Creator CREATOR = new Creator() {        public Student createFromParcel(Parcel source) {            Student stu = new Student();            stu.name = source.readString();            stu.phoneNum = source.readString();            return stu;        }        public Student[] newArray(int size) {            return new Student[size];        }    };    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPhoneNum() {        return phoneNum;    }    public void setPhoneNum(String phoneNum) {        this.phoneNum = phoneNum;    }}

Teacher.java实体类

package com.mobile.intent;import java.io.Serializable;/** * Created Bin. */public class Teacher implements Serializable {    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;    }}

SerializableActivity.java

package com.mobile.intent;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.widget.TextView;public class SerializableActivity extends ActionBarActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_serializable);        Teacher tea = (Teacher) getIntent().getSerializableExtra("SER");        TextView tv = (TextView)findViewById(R.id.text);        tv.setText("姓名:"+tea.getName()+"\n"+                "年龄:"+tea.getAge());    }}

**

ParceableActivity.java

**

package com.mobile.intent;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.widget.TextView;public class ParceableActivity extends ActionBarActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_parceable);        Student stu = (Student) getIntent().getParcelableExtra("PAR");        TextView tv = (TextView)findViewById(R.id.text);        tv.setText("姓名:"+stu.getName()+"\n"+                "手机号:"+stu.getPhoneNum());    }}

MainActivity.java

package com.mobile.intent;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.View;import android.widget.Button;public class MainActivity extends ActionBarActivity implements View.OnClickListener{    private Button par,ser;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        par = (Button)findViewById(R.id.par);        ser = (Button)findViewById(R.id.ser);        par.setOnClickListener(this);        ser.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.par:                startParceableActivity();                break;            case R.id.ser:                startSerializableActivity();                break;        }    }    private void startParceableActivity() {        Student stu = new Student();        stu.setName("张三");        stu.setPhoneNum("1823456789");        Intent intent = new Intent(this,ParceableActivity.class);        Bundle mBundle = new Bundle();        mBundle.putParcelable("PAR",stu);        intent.putExtras(mBundle);        startActivity(intent);    }    private void startSerializableActivity() {        Teacher tea = new Teacher();        tea.setName("李老师");        tea.setAge(28);        Intent intent = new Intent(this,SerializableActivity.class);        Bundle mBundle = new Bundle();        mBundle.putSerializable("SER",tea);        intent.putExtras(mBundle);        startActivity(intent);    }}

运行效果图:


OK~今天就先到这里了
!源代码下载

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android(安卓)之数据的传递与传回
  6. Handler消息机制的原理及应用场景
  7. Android逆向破解之Mointor查看目标日志
  8. Android使用系统文件管理器选择文件,并将Uri转换为File
  9. android存放本地数据

随机推荐

  1. Android的Handler总结
  2. 一起Talk Android吧(第一百四十六回:Androi
  3. 2021最新Android笔试题总结美团Android岗
  4. Android(安卓)Studio开发flutter快捷键
  5. Android消息机制的原理及源码解析
  6. 研究Android音视频-3-在Android设备上采
  7. Android(安卓)Camera OMXCameraAdapter.c
  8. Android(安卓)音视频采集那些事
  9. Android-控件架构
  10. Android(安卓)JetPack Compose 入门