在Android中通过Intent使用Bundle传递对象的使用方法_Android

Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法。

被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable

Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。

两种序列化方式的区别:

1.在使用内存的时候,Parcelable比Serializable性能高,推荐使用Parcelable类;

2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC;

3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下,

这种情况建议使用Serializable。

第一步:定义序列化实体类;
Serializable方式:

/**
 * PersonSer
 *
 * @author http://blog.csdn.net/zuolongsnail
 */
public class PersonSer implements Serializable { 

  /**
   * serialVersionUID的作用是在修改实体类后,可以正常的序列化和反序列化,在此不多说,大家可以谷歌百度下。
   */
  private static final long serialVersionUID = -7620435178023928252L; 

  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;
  } 

}

Parcelable方式:

/**
 * PersonPar
 *
 * @author http://blog.csdn.net/zuolongsnail
 */
public class PersonPar implements Parcelable { 

  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;
  } 

  /**
   * 序列化实体类
   */
  public static final Parcelable.Creator<PersonPar> CREATOR = new Creator<PersonPar>() {
    public PersonPar createFromParcel(Parcel source) {
      PersonPar personPar = new PersonPar();
      personPar.name = source.readString();
      personPar.age = source.readInt();
      return personPar;
    } 

    public PersonPar[] newArray(int size) {
      return new PersonPar[size];
    }
  }; 

  @Override
  public int describeContents() {
    return 0;
  } 

  /**
   * 将实体类数据写入Parcel
   */
  @Override
  public void writeToParcel(Parcel parcel, int flags) {
    parcel.writeString(name);
    parcel.writeInt(age);
  } 

}

第二步:传递序列化对象;

Intent intent = new Intent(MainActivity.this, DestActivity.class);
Bundle bundle = new Bundle();
switch (v.getId()) {
case R.id.serializable_btn:
  // Serializable传递对象
  PersonSer personSer = new PersonSer();
  personSer.setName("zuolong");
  personSer.setAge(26);
  bundle.putSerializable(SER_KEY, personSer);
  intent.putExtra("type", SER_TYPE);
  intent.putExtras(bundle);
  startActivity(intent);
  break;
case R.id.parcelable_btn:
  // Parcelable传递对象
  PersonPar personPar = new PersonPar();
  personPar.setName("snail");
  personPar.setAge(27);
  // Bundle有putParcelableArray和putParcelableArrayList方法,也就可以传递数组和列表
  bundle.putParcelable(PAR_KEY, personPar);
  intent.putExtra("type", PAR_TYPE);
  // Intent也有putParcelableArrayListExtra方法,可以传递实现Parcelable接口的对象列表
  intent.putExtras(bundle);
  startActivity(intent);
  break;
}

第三步:获取对象;

StringBuffer sb = new StringBuffer();
String type = getIntent().getStringExtra("type");
// 根据type判断是哪种类型
if (type.equals(MainActivity.SER_TYPE)) {
  // 获取Serializable对象
  PersonSer personSer = (PersonSer) getIntent().getSerializableExtra(
      MainActivity.SER_KEY);
  sb.append("----From Serializable----").append("\n");
  sb.append("Name:").append(personSer.getName()).append("\n");
  sb.append("Age:").append(personSer.getAge()).append("\n");
} else if (type.equals(MainActivity.PAR_TYPE)) {
  // 获取Parcelable对象
  PersonPar personPar = (PersonPar) getIntent().getParcelableExtra(
      MainActivity.PAR_KEY);
  sb.append("----From Parcelable----").append("\n");
  sb.append("Name:").append(personPar.getName()).append("\n");
  sb.append("Age:").append(personPar.getAge()).append("\n");
}

运行结果截图:

附源码:源码下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索bundle
, intent传递bundle
传递对象
intent传递bundle、intent 传递对象、bundle 传递对象、bundle传递list对象、安卓intent传递对象,以便于您获取更多的相关知识。

时间: 2025-01-26 23:44:51

在Android中通过Intent使用Bundle传递对象的使用方法_Android的相关文章

在Android中通过Intent使用Bundle传递对象的使用方法

Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法. 被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable. 两种序列化方式的区别: 1.在使用内存的时候,Parcelable比Serializable性能高,推荐使用Parcelable类: 2.Ser

详解Android中通过Intent类实现组件间调用的方法_Android

Intent是Android中用来调用其它组件的类,通过Intent,我们可以非常方便的调用Activity,Broadcast Receiver和Service. Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent); 上面这段代码可以用来调用第三方的Activity(启动第三方浏览器来打开百度首页

Android 通过Intent使用Bundle传递对象详细介绍

Android 通过Intent使用Bundle传递对象 Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法. 被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable. 两种序列化方式的区别: 1.在使用内存的时候,Parcelable比Serializa

Android中使用CircleImageView和Cardview制作圆形头像的方法_Android

圆形头像在我们的日常使用的app中很常见,因为圆形的头像比较美观. 使用圆形图片的方法可能有我们直接将图片裁剪成圆形再在app中使用,还有就是使用自定义View对我们设置的任何图片自动裁剪成圆形. 效果图: 这里使用github上CircleImageView github:https://github.com/hdodenhof/CircleImageView CardView顾名思义卡片式的View,CardView继承的是FrameLayout,所以摆放内部控件的时候需要注意一下 可以设置

Android中Java根据文件头获取文件类型的方法_Android

本文实例讲述了Android中Java根据文件头获取文件类型的方法.分享给大家供大家参考,具体如下: 前面讲过Android系统内部的MediaFile类来获取文件类型的办法,这个类主要是根据文件的扩展名来判断,其准确性不是很好.具体可查看Android系统使用MediaFile类判断音频文件类型.其实,获取文件类型最好的办法便是根据文件头信息来判断.下面贴出相关代码: public class FileType { public static final HashMap<String, Str

详解Android中通过Intent类实现组件间调用的方法

Intent是Android中用来调用其它组件的类,通过Intent,我们可以非常方便的调用Activity,Broadcast Receiver和Service. Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent); 上面这段代码可以用来调用第三方的Activity(启动第三方浏览器来打开百度首页

Android中使用Gson解析JSON数据的两种方法_Android

Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海". 第三种类型是映射(mapping),也就是一个名/值对(

解析Android中View转换为Bitmap及getDrawingCache=null的解决方法_Android

1.前言 Android中经常会遇到把View转换为Bitmap的情形,比如,对整个屏幕视图进行截屏并生成图片:Coverflow中需要把一页一页的view转换为Bitmap.以便实现复杂的图形效果(阴影.倒影效果等):再比如一些动态的实时View为便于观察和记录数据.需要临时生成静态的Bitmap. 2.实现方法 1)下面是笔者经常用的一个转换方法 public static Bitmap convertViewToBitmap(View view, int bitmapWidth, int

解析在Android中为TextView增加自定义HTML标签的实现方法_Android

Android中的TextView,本身就支持部分的Html格式标签.这其中包括常用的字体大小颜色设置,文本链接等.使用起来也比较方便,只需要使用Html类转换一下即可.比如: textView.setText(Html.fromHtml(str)); 然而,有一种场合,默认支持的标签可能不够用.比如,我们需要在textView中点击某种链接,返回到应用中的某个界面,而不仅仅是网络连接,如何实现? 经过几个小时对android中的Html类源代码的研究,找到了解决办法,并且测试通过. 先看Htm