需要在Activity间传递大量的数据,能有哪些方法?

news2025/1/16 19:09:58

在Activity间传递的数据一般比较简单,可是有时分实践开发中也会传一些比较复杂的数据,尤其是面试问道当遇到需求在Activity间传递很多的数据怎么办?

Intent 传递数据的巨细是有约束的,它大约能传的数据是1M-8K,原因是Binder锁映射的内存巨细便是1M-8K.一般activity间传递数据会要运用到binder,因此这个就成为了数据传递的巨细的约束。那么当activity间要传递大数据选用什么方法呢?其实方法很多,咱们就举几个比方给咱们说明一下:

  • 使用Intent传递数据: Intent是在Android中用于在组件之间传递数据的机制。你可以将数据放入Intent的extras中,然后在目标Activity中从Intent中获取这些数据。
  • 使用Parcelable或Serializable: 如果需要在Intent中传递自定义对象,你可以让这些对象实现Parcelable接口或Serializable接口,以便将它们序列化为字节流并传递给其他Activity。
  • 使用全局单例: 你可以创建一个单例类来存储需要在多个Activity之间共享的数据。
  • 使用数据库: 如果数据量较大且需要长时间存储,可以考虑使用SQLite数据库或其他持久化解决方案。
  • 使用ViewModel和LiveData: Android架构组件中的ViewModel和LiveData可以帮助在Activity之间共享数据,并且可以在屏幕旋转等情况下保持数据的一致性。
  • 使用文件存储: 如果数据量非常大,可以将数据写入文件,然后在另一个Activity中读取。
  • 使用网络请求: 如果数据可以从服务器获取,可以考虑使用网络请求在Activity之间共享数据。
  • 使用依赖注入: 通过依赖注入框架,你可以在多个Activity之间注入共享的数据实例,从而避免数据冗余和一致性问题。

本篇主要内容讲一下第一种使用Intent传递数据。

使用Intent传递数据

什么是intent?

intent就是起到一个中间媒介的作用,可以在activity之间传递数据,也可以进行进行一些基本的action。比如startactivity()之类。

利用intent在两个activity之间传递数据

首先我们创建两个activity,分别叫MainActivity以及OtherActivity。在MainActivity的布局文件中,添加一个button,用于页面之间的转跳,以及相关数据的传输。在OtherActivity的布局文件中,我们添加一个TextView,用于接受数据。

MainActivity中的代码:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

这些代码,相信大家都很熟悉,应该不难。我们主要来说说putExtra();

putExtra(“A”,B)中,AB为键值对,第一个参数为键名,第二个参数为键对应的值。顺便提一下,如果想取出Intent对象中的这些值,需要在你的另一个Activity中用getXXXXXExtra方法,注意需要使用对应类型的方法,参数为键名

贴出OtherActivity的代码:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

因为我们之前传入的是一个字符串,所以调用getStringExtra这个方法。

这样我们就简单的在两个activity之间传递数据啦~

利用intent在两个activity之间传递数据包

传递数据包,我们主要使用bundle这个类。

首先看MainActivity中的代码:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

首先我们创建一个bundle类。当传递字符串时,使用putString方法;传递整数时,用putInt方法。 最后再用putExtras 将数据包传递到另一个activiity。

OtherActivity中的代码:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

首先我们创建一个bundle对象,接收MainActivity传递过来的数据。最后用setText方法,将其展现出来。这样一个数据包就传递完成了。

利用intent获取到返回数据

我们继续创建两个Activity,分别叫MainActivity和OtherActivity。但是这次不同的是,我们在MainActivity的xml文件中,创建一个按钮和一个TextView,用于接收返回的数据。在OtherActivity的xml的文件中,我们创建一个EditText和一个button,用于返回数据。 (这两个Xml文件的代码,我也不不一一展示了)

OtherActivity的代码:

都比较基础,我们主要看setResult()这个方法。

它的第一个参数是一个返回码,主要用于设置返回状态,你也可以自行进行定义。第二个参数是一个intent对象。

MainActivity的代码:

关于Android开发中需要在Activity间传递大量的数据,怎么去解决?其实有很多方法,上方也举例了一个实际案例。更多有关Android开发技术可以参考[《Android核心技术手册》]学习更多Android进阶技巧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/960494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【狂神】Spring5笔记(10-19)

又是美好而努力的一天呀~ __ /|* * * * * * / * * * / * * * * / * * * * * * * happy valentines day * * * * …

python基础之miniConda管理器

一、介绍 MiniConda 是一个轻量级的 Conda 版本,它是 Conda 的精简版,专注于提供基本的环境管理功能。Conda 是一个流行的开源包管理系统和环境管理器,用于在不同的操作系统上安装、管理和运行软件包。 与完整版的 Anaconda 相比&#xff0c…

CSS transition 过渡

1 前言 CSS过渡(transition)可以在一个元素切换到另一种状态时为其定义平滑的过渡效果。 例如,用户鼠标悬停在按钮上时,按钮颜色平滑的从一个颜色过渡到另一个颜色。 .btn:hover{background-color: red;color: black; }默认悬停效果 添加过渡效果 .b…

2.(Python数模)线性规划问题

Python解决线性规划问题 参考了以下博文 https://blog.csdn.net/m0_46692607/article/details/126784109?spm1001.2014.3001.5506 目标是解决以下的线性规划,程序计算出目标函数的最大值,并在最大值下取得的x1x2x3对应值。 源代码如下: …

MybatisPlus(2)

前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 上篇我们简单介绍了MybatisPlus的方便之处,这篇来深入了解Myb…

探索生成式人工智能的前景

一、什么是生成式人工智能? 生成式人工智能(Generative AI)是一类人工智能(AI)技术和模型,旨在创建新颖的内容。与简单的复制不同,这些模型通过利用从训练数据集中收集到的模式和见解&#xff…

飞桨花滑骨骼点动作识别比赛记 2

基于 PaddleVideo 的花滑骨骼点动作识别 2s-AGCN配置文件节点流配置文件 2s-agcn_ntucs_joint_fsd.yamlMODEL 字段DATASET 字段PIPELINE 和 INFERENCE 字段OPTIMIZER 字段 agcn2s.pygraph输入通道数 骨骼流 Dataset 和 Pipeline配置文件DATASETPIPELINE 源码skeleton.pyskeleto…

Elasticsearch 7.6 - API高阶操作篇

ES 7.6 - API高阶操作篇 分片和副本索引别名添加别名查询所有别名删除别名使用别名代替索引操作代替插入代替查询 场景实操 滚动索引索引模板创建索引模板查看模板删除模板 场景实操一把索引的生命周期数据迁移APIGEO(地理)API索引准备矩形查询圆形查询多边形查询 自定义分词器…

Spring理解,重要概念及图解,2023秋招spring常见八股文

按照自己的需求,找到自己不会的地方去解决 1.Spring的核心 1)Spring的两大核心:IoC和AOP Spring框架包含众多模块,如Core、Testing、Data Access、Web Servlet等,其中Core是整个Spring框架的核心模块。Core模块提供…

进程的挂起状态

进程的挂起状态详解 当我们谈论操作系统和进程管理时,我们经常听到进程的各种状态,如“就绪”、“运行”和“阻塞”。但其中一个不那么常被提及,但同样重要的状态是“挂起”状态。本文将深入探讨挂起状态,以及为什么和在何时进程…

linux中安装nodejs,卸载nodejs,更新nodejs,git,linux中安装nginx并配置

文章目录 node的安装与卸载(更新版本)卸载nodejs安装新版本node git安装与拉取代码安装解决 linux git 每次推拉(push/pull)代码都要输入用户名密码的问题 nginx 安装、配置和卸载安装nginx配置**.conf 文件内容 nginx 卸载 注意,我的是Ubunt…

【Linux】root和子用户都能执行的命令,sudo无法执行(已解决)

全流程帖子 https://ask.oceanbase.com/t/topic/35604437/7 1.问题 如题,在编译miniob的时候遇到如下错误 [muvm-cnt8:~/code/miniob]$ sudo bash build.sh init build.sh init HEAD is now at 5df3037d Merge branch release-2.1.12-stable-pull into patches-2.…

一文搞定全进程间通讯(IPC)八大方式-管道、命名管道、信号、信号量、消息队列、共享内存+内存映射、套接字

进程间通讯(IPC) 参考 / 引用: 如何在Linux下的进行多进程编程(初步) - 知乎 (zhihu.com)。浅析进程间通信的几种方式(含实例源码) - 知乎 (zhihu.com)。 linux基础——linux进程间通信&#…

从零开始,使用C语言实现扫雷小游戏

扫雷 1. 前言2. 准备工作3. 设计思路4. 定义数组5. 初始化6. 打印7. 布置雷8. 排查雷9. 完整代码 1. 前言 大家好,我是努力学习游泳的鱼。今天我们会用C语言实现一个经典的windows小游戏:扫雷。扫雷是一款单机小游戏,我上中学时特喜欢在电脑…

网易24届内推

【网易】2024届网易互联网秋季校园招聘内推开始啦!给你分享我的专属内推邀请函:https://bole.campus.163.com/campus/home?projectId55&type99&isShare1&boleId7b842acc7c2b42db&boleType2&signatured5f2a3dc23bed70777a8be1a14b49…

简单了解IPv4编址

目录 一、IPv4地址 二、进制转换 三、有类IPv4 四、无类IPv4 3.1 子网掩码 3.2 地址规划 3.3 VLSM可变长子网掩码 五、私有IPv4地址 六、IPv4报文格式 七、IP地址解析 一、IPv4地址 IPv4地址由“网络位主机位”构成,所谓的网络位就是我们通常所指的网段区…

python 列表extend方法和+(拼接)的区别

1.extend方法会直接作用于原始列表,会修改原始列表的值 a [10, 20, 30] b [1, 2, 3]print(a b) print(a) a.extend(b) print(a) 2.extend接收到的参数是一个可迭代的对象(iterable),不管是list,tuple,str,dict,set a [10, 20, 30] b {"name&qu…

公司内部网段多管控乱,该如何规范跨网文件传输交换?

古往今来,高筑墙一直是有效的防御措施。从边塞长城到护城河外的高高城墙,都是利用隔离地域的形式实现保护安全域的效果。这样一来,城内的安全域可以在遇到危险时受到有效保护。 在企业网络安全防护方面,网络安全域隔离也是网络安全…

3D点云处理:圆柱侧面点云展开为平面 凹凸缺陷检测(附源码)

文章目录 1. 基本内容展开部分推导2. 展开流程3. 代码实现4. 应用文章目录:3D视觉个人学习目录微信:dhlddxB站: Non-Stop_目标:对采集的圆柱面点云展开为平面;应用:可用于检测圆柱侧面的凹凸缺陷;1. 基本内容 圆柱的侧面展开原理是将一个圆柱体(或柱体)的侧面展开成一个…

el-table实现纯前端导出(适用于el-table任意表格)

2023.9.1今天我学习了如何使用el-table实现前端的导出功能,该方法的好处有无论你的el-table长什么样子,导出之后就是什么样子。 1.安装三个插件 npm install file-save npm install xlsx npm install xlx-style 2.创建Export2Excel.js // 根据dom导出表…