Android——通过Intent传递一些二进制数据的方法有哪些
1、方法
(1)使用Serializable接口实现序列化。利用Bundle.putSerializable(Key, Object);这里objec对象需要实现serializable接口。
(2)实现Parcelable接口串行化。利用Bundle.putParcelable(Key, Object);这里Object对象需要实现Parcelable接口。
2、两者区别:
(1)在使用内存的时候,Parcelable类比Serializable性能高,所以推荐使用Parcelable类。
(2)Serializable在序列化的时候会产生大量的临时变量。
(3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点,也不提倡用,但在这种情况下还是建议使用Serializable。
3、实现:
(1)Serializable的实现,只需要继承implements Serializable即可。这只是给对象打了一个标记,系统会自动将其序列化。
(2)Parcelable的实现,需要在类中添加一个静态成员变量CREATOR(必须是public,否则报错),这个变量需要继承Parcelable.Creator接口。
转自:http://blog.csdn.net/wulongtiantang/article/details/7937094
Demo:
第一步:新建一个Android工程命名为ObjectTranDemo(类比较多哦!)目录结构如下图:
第二步:修改main.xml布局文件(这里我增加了两个按钮)代码如下
-
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent" 6 > 7 <TextView 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 android:text="Welcome to Mr wei's blog." 11 /> 12 <Button 13 android:id="@+id/button1" 14 android:layout_width="fill_parent" 15 android:layout_height="wrap_content" 16 android:text="Serializable" 17 /> 18 <Button 19 android:id="@+id/button2" 20 android:layout_width="fill_parent" 21 android:layout_height="wrap_content" 22 android:text="Parcelable" 23 /> 24 </LinearLayout>
第三步:新建两个类一个是Person.Java实现Serializable接口,另一个Book.java实现Parcelable接口,代码分别如下:
Person.java:
-
1 package com.tutor.objecttran; 2 import java.io.Serializable; 3 public class Person implements Serializable { 4 private static final long serialVersionUID = -7060210544600464481L; 5 private String name; 6 private int age; 7 public String getName() { 8 return name; 9 } 10 public void setName(String name) { 11 this.name = name; 12 } 13 public int getAge() { 14 return age; 15 } 16 public void setAge(int age) { 17 this.age = age; 18 } 19 20 }
Book.java:
-
1 package com.tutor.objecttran; 2 import android.os.Parcel; 3 import android.os.Parcelable; 4 public class Book implements Parcelable { 5 private String bookName; 6 private String author; 7 private int publishTime; 8 9 public String getBookName() { 10 return bookName; 11 } 12 public void setBookName(String bookName) { 13 this.bookName = bookName; 14 } 15 public String getAuthor() { 16 return author; 17 } 18 public void setAuthor(String author) { 19 this.author = author; 20 } 21 public int getPublishTime() { 22 return publishTime; 23 } 24 public void setPublishTime(int publishTime) { 25 this.publishTime = publishTime; 26 } 27 28 public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>() { 29 public Book createFromParcel(Parcel source) { 30 Book mBook = new Book(); 31 mBook.bookName = source.readString(); 32 mBook.author = source.readString(); 33 mBook.publishTime = source.readInt(); 34 return mBook; 35 } 36 public Book[] newArray(int size) { 37 return new Book[size]; 38 } 39 }; 40 41 public int describeContents() { 42 return 0; 43 } 44 public void writeToParcel(Parcel parcel, int flags) { 45 parcel.writeString(bookName); 46 parcel.writeString(author); 47 parcel.writeInt(publishTime); 48 } 49 }
第四步:修改ObjectTranDemo.java,并且新建两个Activity,一个是ObjectTranDemo1.java,别一个是ObjectTranDemo2.java.分别用来显示Person对像数据,和Book对象数据:,代码分别如下:
ObjectTranDemo.java:
-
1 package com.tutor.objecttran; 2 import android.app.Activity; 3 import android.content.Intent; 4 import android.os.Bundle; 5 import android.view.View; 6 import android.view.View.OnClickListener; 7 import android.widget.Button; 8 public class ObjectTranDemo extends Activity implements OnClickListener { 9 10 private Button sButton,pButton; 11 public final static String SER_KEY = "com.tutor.objecttran.ser"; 12 public final static String PAR_KEY = "com.tutor.objecttran.par"; 13 public void onCreate(Bundle savedInstanceState) { 14 super.onCreate(savedInstanceState); 15 setContentView(R.layout.main); 16 setupViews(); 17 18 } 19 20 //我的一贯作风呵呵 21 public void setupViews(){ 22 sButton = (Button)findViewById(R.id.button1); 23 pButton = (Button)findViewById(R.id.button2); 24 sButton.setOnClickListener(this); 25 pButton.setOnClickListener(this); 26 } 27 //Serializeable传递对象的方法 28 public void SerializeMethod(){ 29 Person mPerson = new Person(); 30 mPerson.setName("frankie"); 31 mPerson.setAge(25); 32 Intent mIntent = new Intent(this,ObjectTranDemo1.class); 33 Bundle mBundle = new Bundle(); 34 mBundle.putSerializable(SER_KEY,mPerson); 35 mIntent.putExtras(mBundle); 36 37 startActivity(mIntent); 38 } 39 //Pacelable传递对象方法 40 public void PacelableMethod(){ 41 Book mBook = new Book(); 42 mBook.setBookName("Android Tutor"); 43 mBook.setAuthor("Frankie"); 44 mBook.setPublishTime(2010); 45 Intent mIntent = new Intent(this,ObjectTranDemo2.class); 46 Bundle mBundle = new Bundle(); 47 mBundle.putParcelable(PAR_KEY, mBook); 48 mIntent.putExtras(mBundle); 49 50 startActivity(mIntent); 51 } 52 //铵钮点击事件响应 53 public void onClick(View v) { 54 if(v == sButton){ 55 SerializeMethod(); 56 }else{ 57 PacelableMethod(); 58 } 59 } 60 }
ObjectTranDemo1.java:
-
1 package com.tutor.objecttran; 2 import android.app.Activity; 3 import android.os.Bundle; 4 import android.widget.TextView; 5 public class ObjectTranDemo1 extends Activity { 6 @Override 7 public void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 10 TextView mTextView = new TextView(this); 11 Person mPerson = (Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY); 12 mTextView.setText("You name is: " + mPerson.getName() + "/n"+ 13 "You age is: " + mPerson.getAge()); 14 15 setContentView(mTextView); 16 } 17 }
ObjectTranDemo2.java:
-
1 package com.tutor.objecttran; 2 import android.app.Activity; 3 import android.os.Bundle; 4 import android.widget.TextView; 5 public class ObjectTranDemo2 extends Activity { 6 7 public void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 TextView mTextView = new TextView(this); 10 Book mBook = (Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY); 11 mTextView.setText("Book name is: " + mBook.getBookName()+"/n"+ 12 "Author is: " + mBook.getAuthor() + "/n" + 13 "PublishTime is: " + mBook.getPublishTime()); 14 setContentView(mTextView); 15 } 16 }
第五步:比较重要的一步啦,修改AndroidManifest.xml文件(将两个新增的Activity,ObjectTranDemo1,ObjectTranDemo2)申明一下代码如下(第14,15行):
-
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.tutor.objecttran" 4 android:versionCode="1" 5 android:versionName="1.0"> 6 <application android:icon="@drawable/icon" android:label="@string/app_name"> 7 <activity android:name=".ObjectTranDemo" 8 android:label="@string/app_name"> 9 <intent-filter> 10 <action android:name="android.intent.action.MAIN" /> 11 <category android:name="android.intent.category.LAUNCHER" /> 12 </intent-filter> 13 </activity> 14 <activity android:name=".ObjectTranDemo1"></activity> 15 <activity android:name=".ObjectTranDemo2"></activity> 16 </application> 17 <uses-sdk android:minSdkVersion="7" /> 18 </manifest>
第六步:运行上述工程查看效果图啦:
效果1:首界面:
效果2:点击Serializable按钮
效果3:点击Parcelable按钮:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2016-01-22 安卓camera拍照时序
2016-01-22 安卓Camera APP
2016-01-22 Activity生命周期
2016-01-22 onWindowFocusChanged重要作用(得到/失去焦点call) 、