Android那点事-系列之(一)Parcelable和Serializable的区别与使用
16lz
2021-01-25
大家好,我是Bin,今天为大家分享一下Android中Parcelable和Serializable的区别与使用。
大家都知道,这两个都是和序列化相关的接口,那么我先带大家普及一下有关序列化的基础知识。
一、序列化、反序列化是什么?
对象的序列化: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~今天就先到这里了
!源代码下载
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Android(安卓)之数据的传递与传回
- Handler消息机制的原理及应用场景
- Android逆向破解之Mointor查看目标日志
- Android使用系统文件管理器选择文件,并将Uri转换为File
- android存放本地数据