传递值对象:

一、serializable实现:简单易用

  serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可。Serializable 接口是一种标识接口,这意味着无需实现方法,Java便会对这个对象进行高效的序列化操作。

  这种方法的缺点是使用了反射,序列化的过程较慢。这种机制会在序列化的时候创建许多的临时对象,容易触发垃圾回收。

新建User.java:

    public class User implements Serializable{
      private String name;
      private int age;

      public String getName() {
        return name;
      }
      public int getAge() {
        return age;
      }
      public void setName(String name) {
        this.name = name;
      }
      public void setAge(int age) {
        this.age = age;
      }
      public User(String name,int age){
        this.name = name;
        this.age = age;
      }
    }

2、MainActivity.java:

    i.putExtra("user",new User("Android",2));

3、TheAty.java:

    User user = (User) i.getSerializableExtra("user");
    tv.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge()));

二、Parcelable实现: 速度至上

  Parcelable的实现会使代码运行地特别快:我们已经清楚地知道了序列化的过程,而不需要使用反射来推断。同时为了更快地进行序列化,对象的代码也需要高度优化。

  因此,很明显实现Parcelable并不容易。实现Parcelable接口需要写大量的模板代码,这使得对象代码变得难以阅读和维护。

1、新建User.java:

    public class User implements Parcelable{
      private String name;
      private int age;

      public String getName() {
        return name;
      }
      public int getAge() {
        return age;
      }
      public void setName(String name) {
        this.name = name;
      }
      public void setAge(int age) {
        this.age = age;
      }
      public User(String name,int age){
        this.name = name;
        this.age = age;
      }
      

      @Override
      public int describeContents() {
        return 0;
      }
      @Override
      public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(getName());
        dest.writeInt(getAge());
      }  
      

      public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel source) {
          return new User(source.readString(),source.readInt());
        }
        @Override
        public User[] newArray(int size) {
          return new User[size];
        }
      };
    }

2、MainActivity.java:

    i.putExtra("user",new User("Android",2));

TheAty.java:

    User user = (User) i.getParcelableExtra("user");
    tv.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge()));

在Activity之间传递参数(三)——serializable和parcelable的区别的更多相关文章

  1. Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]

    http://blog.csdn.net/cjjky/article/details/6441104 在Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSeri ...

  2. Android学习总结——Activity之间传递参数

    核心内容:一.在 Activity 之间传递简单数据二.在 Activity 之间传递复杂数据 三.在 Activity 之间传递自定义值对象   软件环境:Android Studio   一.在 ...

  3. Activity之间传递参数(四)

    --------siwuxie095 获取Activity的返回参数 1.首先修改两个布局文件,都修改为 LinearLayout 布局, 添加orientation属性为:vertical. (1) ...

  4. 在Activity之间传递参数(四)

    获取Activity的返回参数(在参数(三)User的例子的基础上实现): 1.activity_the_aty.xml文件:<EditText android:id="@+id/ed ...

  5. Activity之间传递参数(三)

    ------siwuxie095 传递值对象,即自定义的有数据类型的对象 1.首先 new 一个 class:User,用于创建自定义对象,同时右键 Generate 出 Constructor.se ...

  6. Activity之间传递参数(二)

    ------siwuxie095 传递数据包 1.传递数据包要用到Bundle,MainActivity.java中: package com.siwuxie095.sendargs; import ...

  7. Activity之间传递参数(一)

    -------siwuxie095 传递简单数据 (1)首先创建一个项目:SendArgs (2)选择API:21 Android 5.0 (3)选择 Empty Activity (4)默认 (5) ...

  8. 在Activity之间传递参数(一)

    准备: 一.创建主界面:activity_main.xml文件中<Button android:text="启动另一个Activity" android:id="@ ...

  9. 在Activity之间传递参数(二)

    传递数据包bundle: 1.MainActivity.class: findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClic ...

随机推荐

  1. 利用nagios搭建打印机监控服务器

    实验背景:公司有很多台HP惠普打印机,管理起来比较麻烦.于是想着能否做个打印机监控服务器,能够快速响应打印机所出现的所有问题.之后上网查了相关资料搭建了一台,使用也没任何问题,于是便拿出来跟大家分享. ...

  2. 【WPF系列】基础学习-XAML

    引言 WPF框架中已经提到,WPF框架提供XAML基本服务.WPF中XAML的引入向开发者提供UI设计和代码分离的编程型.XAML是WPF中提出的一个具有重要意义的新技术,基本涉及WPF中所有UI开发 ...

  3. Mirantis OpenStack 8.0 版本大概性分析

    作为 OpenStack 领域标杆性企业之一的 Mirantis 在2016年3月初发布了最新的 MOS 8.0 版本.本文试着基于公开资料进行一些归纳分析. 1. 版本概况 1.1 概况 社区版本: ...

  4. ORACLE数据库存储空间使用情况查询

    使用系统sys或者dba权限的账户创建视图如下: 1. 主要从数据库的表dba_data_files,dba_segments两张表中获取.2. 默认数据库保存的是byte单位,转换关系如下: 102 ...

  5. 第1章 重构,第一个案例(3):运用多态取代switch

    3. 运用多态取代与价格相关的条件逻辑 3.1 switch和“常客积分”代码的再次搬迁 (1)switch:最好不要在另一个对象的属性上运用switch语句 switch(getMovie().ge ...

  6. Linux提权(2)-高级版

    当你在攻击受害者的电脑时即使你拥有了一个shell,依然可能会有一些拒绝执行指令的限制.为了获得目标主机的完整控制权限,你需要在未授权的地方绕过权限控制.这些权限可以删除文件,浏览私人信息,或者安装并 ...

  7. python高级之面向对象高级

    python高级之面向对象高级 本节内容 成员修饰符 特殊成员 类与对象 异常处理 反射/自省 单例模式 1.成员修饰符 python的类中只有私有成员和公有成员两种,不像c++中的类有公有成员(pu ...

  8. C语言基础(一)

    7744问题(输出所有形如aabb的4位完全平方数) 方法1: #include<stdio.h> #include<math.h> int main (){ ;a<=; ...

  9. HTML 学习笔记 JavaScript(创建对象)

    原博地址:http://www.cnblogs.com/dolphinX/p/3288118.html JavaScript 有Date Array String等这样的内置对象,功能强大实用简单,但 ...

  10. httpd练习.md

    需求说明 分别用httpd-2.2和httpd-2.4 实现以下功能: 两个虚拟主机,名字为www.a.com.www.b.org. www.a.com 页面文件为/opt/a.com/htdocs, ...