做网站用虚拟机还是服务器,网网站制作,清河做网站哪家好,网站建设公司一年多少钱Android中的传递有两个方法#xff0c;一个是Serializable#xff0c;另一个是Parcelable。Serializable是J2SE本身就支持的。而Parcelable是Android所特有的。二者的使用场景和区别#xff1a;1)在使用内存的时候#xff0c;Parcelable比Serializable性能高#xff0c;所…Android中的传递有两个方法一个是Serializable另一个是Parcelable。Serializable是J2SE本身就支持的。而Parcelable是Android所特有的。二者的使用场景和区别1)在使用内存的时候Parcelable比Serializable性能高所以推荐使用Parcelable。2)Serializable在序列化的时候会产生大量的临时变量从而引起频繁的GC。3)Parcelable不能使用在要将数据存储在磁盘上的情况因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点但此时还是建议使用Serializable 。Serializable接口实现比较简单只要实现setter和getter就可以了。而Parcelable实现比较麻烦些。用一个小的demo来说明1.新建android项目ObjectTranDemo2.创建一个entity的javaBean:Person.java.实现Serializable接口package com.example.objecttrandemo;import java.io.Serializable;public class Person implements Serializable {private static final long serialVersionUID -7060210544600464481L;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;}}3.创建主界面activity_main.xml:android:orientationverticalandroid:layout_widthfill_parentandroid:layout_heightfill_parentandroid:layout_widthfill_parentandroid:layout_heightwrap_contentandroid:textandroid object trance/android:idid/button1android:layout_widthfill_parentandroid:layout_heightwrap_contentandroid:textSerializable/android:idid/button2android:layout_widthfill_parentandroid:layout_heightwrap_contentandroid:textParcelable/4.创建主activity。这个activity主要用来响应点击事件和传递数据。ObjecttranDemo.java:package com.example.objecttrandemo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class ObjectTranDemo extends Activity implements OnClickListener{private Button sButton,pButton;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setupViews();}//initial the viewspublic void setupViews(){sButton (Button)findViewById(R.id.button1);pButton (Button)findViewById(R.id.button2);sButton.setOnClickListener(this);pButton.setOnClickListener(this);}//Serializeable object trancepublic void SerializeMethod(){Person mPerson new Person();mPerson.setName(durant);mPerson.setAge(25);Intent mIntent new Intent(this,ObjectTranDemo1.class);Bundle mBundle new Bundle();mBundle.putSerializable(mPerson,mPerson);mIntent.putExtras(mBundle);startActivity(mIntent);}//Pacelable object trancepublic void PacelableMethod(){Book mBook new Book();mBook.setBookName(a man from mars);mBook.setAuthor(james);mBook.setPublishTime(2014);Intent mIntent new Intent(this,ObjectTranDemo2.class);Bundle mBundle new Bundle();mBundle.putParcelable(mBook, mBook);mIntent.putExtras(mBundle);startActivity(mIntent);}Overridepublic void onClick(View v) {if(v sButton){SerializeMethod();}else{PacelableMethod();}}}5.新建activity ObjectTranDemo1.java用来显示Serializable接口传递过来的数据package com.example.objecttrandemo;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class ObjectTranDemo1 extends Activity{Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TextView mTextView new TextView(this);Person mPerson (Person)getIntent().getSerializableExtra(mPerson);mTextView.setText(You name is: mPerson.getName() \nYou age is: mPerson.getAge());setContentView(mTextView);}}至此Serializable接口传递数据完毕对了别忘了在Mainfest.xml文件中声明新的activitypackagecom.example.objecttrandemoandroid:versionCode1android:versionName1.0 android:minSdkVersion8android:targetSdkVersion18 /android:allowBackuptrueandroid:icondrawable/ic_launcherandroid:labelstring/app_nameandroid:themestyle/AppTheme android:namecom.example.objecttrandemo.ObjectTranDemoandroid:labelstring/app_name 下面看Parcelable的传递实现Parcelable一般需要4个步骤1)implements Parcelable2)重写writeToParcel方法将你的对象序列化为一个Parcel对象即将类的数据写入外部提供的Parcel中打包需要传递的数据到Parcel容器保存以便从 Parcel容器获取数据3)重写describeContents方法内容接口描述默认返回0就可以4)实例化静态内部对象CREATOR实现接口Parcelable.Creatorpublic static final Parcelable.Creator CREATOR注其中public static final一个都不能少内部对象CREATOR的名称也不能改变必须全部大写。需重写本接口中的两个方法createFromParcel(Parcel in) 实现从Parcel容器中读取传递数据值封装成Parcelable对象返回逻辑层newArray(int size) 创建一个类型为T长度为size的数组仅一句话即可(return new T[size])供外部类反序列化本类数组使用。简而言之通过writeToParcel将你的对象映射成Parcel对象再通过createFromParcel将Parcel对象映射成你的对象。也可以将Parcel看成是一个流通过writeToParcel把对象写到流里面在通过createFromParcel从流里读取对象只不过这个过程需要你来实现因此写的顺序和读的顺序必须一致。具体1.新建Book的实体类Book.java:package com.example.objecttrandemo;import android.os.Parcel;import android.os.Parcelable;public class Book implements Parcelable{private String bookName;private String author;private int publishTime;public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName bookName;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author author;}public int getPublishTime() {return publishTime;}public void setPublishTime(int publishTime) {this.publishTime publishTime;}//Internal Description Interface,You do not need to manageOverridepublic int describeContents() {return 0;}//give some attention to the oder betwwen writeToParcel and createFromParcelOverridepublic void writeToParcel(Parcel parcel, int flags){parcel.writeString(bookName);parcel.writeString(author);parcel.writeInt(publishTime);}public static final Parcelable.Creator CREATOR new Creator() {Overridepublic Book[] newArray(int size) {return new Book[size];}Overridepublic Book createFromParcel(Parcel source) {Book mBook new Book();mBook.bookName source.readString();mBook.author source.readString();mBook.publishTime source.readInt();return mBook;}};}2.新建activity :ObjectTranDemo2.java.用来显示parcelable的数据package com.example.objecttrandemo;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class ObjectTranDemo2 extends Activity{public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TextView mTextView new TextView(this);Book mBook (Book)getIntent().getParcelableExtra(mBook);mTextView.setText(Book name is: mBook.getBookName()\nAuthor is: mBook.getAuthor() \n PublishTime is: mBook.getPublishTime());setContentView(mTextView);}}