当前位置: 首页 > news >正文

Intent 和 Bundle 传值的区别

文章目录

      • 1、使用上
        • 1.1 Intent 方式
        • 1.2 Bundle 方式
      • 2、为什么 Bundle 使用 ArrayMap 而不是 Hashmap 实现呢?

1、使用上

1.1 Intent 方式

  • 举例:将数据从页面 A 传递到 B,然后再传递到 C
  • A 页面:
Intent intent=new Intent(MainActivity.this,BActivity.class);
intent.putExtra("String","MainActivity中的值");
intent.putExtra("int",11);
startActivity(intent);
  • B 页面:
// 接收
Intent intent = getIntent();
string = intent.getStringExtra("String");
key = intent.getIntExtra("int",0);// 发送
Intent intent=new Intent(BActivity.this,CActivity.class);
intent.putExtra("String1",string);
intent.putExtra("int1",key);
intent.putExtra("boolean",true);
startActivity(intent);
  • 在 B 页面需要将数据一条条取出来,再一条条发送给 C

1.2 Bundle 方式

  • A 页面:
Intent intent = new Intent(MainActivity.this, BActivity.class);
Bundle bundle = new Bundle();
bundle.putString("String","MainActivity中的值");
bundle.putInt("int",11);
intent.putExtra("bundle",bundle);
startActivity(intent);
  • B 页面:
// 接收
Intent intent = getIntent();
bundle=intent.getBundleExtra("bundle");// 发送
Intent intent=new Intent(BActivity.this,CActivity.class);
//可以传给CActivity额外的值
bundle.putBoolean("boolean",true);
intent.putExtra("bundle1",bundle);
startActivity(intent);
  • 可以直接对 Bundle 进行操作。但是 Bundle 需要借助 Intent 完成数据触动你
  • ++Bundle 旨在存储数据,Intent 旨在传值++

2、为什么 Bundle 使用 ArrayMap 而不是 Hashmap 实现呢?

  • Bundle 内部由 ArrayMap 实现。ArrayMap 底层是两个数组,一个 Int 数组存储 key 对应的 hash 值,另一个数组存储 key 和 value,key 在 index*2 位置,value 在 index*2+1 位置。每次插入时,根据 key 的 hash 值,利用二分查找,去寻找 key 在 Int 数组中的下标位置 index,如果出现了 hash 冲突,从目标点向两头遍历,直到找到正确的 index。二份查找法只适合小数据量操作,如果数据量比较大,性能将退化。而 Bundle 的场景大多数为小数据量,故使用 ArrayMap 更合适。

  • 其次,HashMap 使用 Serializable 进行系列化,Bundle 使用 Parcelable 进行系列化。在 Android 平台,更推荐使用 Parcelable 实现序列化,开销更小,能更快的进行书序的序列化和反序列化。

  • 相关文章
    ArrayMap 源码解析
    HashMap 源码解析
    Serializable 和 Parcelable

http://www.lryc.cn/news/9466.html

相关文章:

  • TypeScript 初步
  • leaflet 添加zoomslider,控制zoom放大缩小(074)
  • 10分钟学会python对接【OpenAI API篇】
  • 2023美赛必须注意事项
  • 基于微信小程序的智能招聘小程序
  • Java文件操作和I/O
  • QT项目_RPC(进程间通讯)
  • 移动硬盘文件丢失怎么恢复?
  • 什么是同步整流和异步整流
  • 关于PYTHON Enclosing 的一个小问题
  • LabVIEW错误-2147220623:最大内存块属性不存在
  • 图的总复习
  • 测试流程记录
  • Mysql主从架构与实例
  • webpack(高级)--Tapable
  • Python常见类型转换合集
  • 知识点(1)
  • Tomcat源码分析-启动分析(三) Catalina启动
  • 程序员必备的软技能-金字塔原理拆解
  • 基金详细介绍
  • 媒体邀约之企业如何加强品牌的宣传力度
  • 【SpringBoot】75、SpringBoot中使用spring-retry轻松解决重试
  • 网络工程师必知的几个问题
  • 【仓库管理】搭建 Maven 私服之一--Nexus仓库(Repository)管理软件
  • 凹凸贴图(Bump Mapping)
  • 文华财经期货指标公式量化策略分析软件,多空共振信号准确率高的公式源码
  • 基于TCP协议的文件传输系统
  • Linux定时备份MySql数据库
  • JavaScript prototype(原型对象)
  • pytorch各种版本最简单安装,不用自己安装cuda cudnn