返回顶部
首页 > 资讯 > 移动开发 >AndroidIntent传递大量数据出现问题解决
  • 134
分享到

AndroidIntent传递大量数据出现问题解决

2024-04-02 19:04:59 134人浏览 薄情痞子
摘要

目录正文异常TransactionTooLargeExceptionIntent携带信息的大小受Binder限制为什么Binder要限制传输数据的大小替代方案正文 官方文档 

正文

官方文档 https://developer.Android.Google.cn/guide/components/activities/parcelables-and-bundles

在sendBroadcast,startActivity时,我们会用到Intent。 Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。

异常TransactionTooLargeException

Intent传递数据时,如果数据太大,可能会出现异常TransactionTooLargeException。

注意:

在 Android 7.0(api 级别 24)或更高版本中,系统会在运行时抛出 TransactionTooLargeException 异常。在较低版本的 Android 中,系统仅在 loGCat 中显示警告。

TransactionTooLargeException继承了RemoteException

package android.os;
public class TransactionTooLargeException extends RemoteException {
    public TransactionTooLargeException() {
        super();
    }
    public TransactionTooLargeException(String msg) {
        super(msg);
    }
}

追踪到Binder,它的transactNative方法会报出RemoteException

public native boolean transactNative(int code, Parcel data, Parcel reply,
            int flags) throws RemoteException;

抛出异常与Binder有关。

通过 intent 发送数据时,应小心地将数据大小限制为几 KB。发送过多数据会导致系统抛出 TransactionTooLargeException 异常。

Intent携带信息的大小受Binder限制

Intent携带信息的大小其实是受Binder限制。本文标题也可以改为“Binder传递数据大小限制”。

数据以Parcel对象的形式存放在Binder传递缓存中。 如果数据或返回值比传递buffer大,则此次传递调用失败并抛出TransactionTooLargeException异常。

Binder事务缓冲区有一个限定大小,通常是1Mb。由进程中正在处理的所有事务共享缓存空间。

由于此限制是进程级别而不是 Activity 级别的限制,因此这些事务包括应用中的所有 binder 事务,例如 onSaveInstanceStatestartActivity 以及与系统的任何互动。超过大小限制时,将引发 TransactionTooLargeException。

对于 savedInstanceState 的具体情况,应将数据量保持在较小的规模,因为只要用户可以返回到该 Activity,系统进程就需要保留所提供的数据(即使 Activity 的进程已终止)。我们建议您将保存的状态保持在 50k 数据以下。

为什么Binder要限制传输数据的大小

个人推测,作为一种IPC的方式,Binder并不是为传输大量数据而设计。

替代方案

当需要传递长字符串、Bitmap等时,不要考虑使用Intent传递数据的方案

1、单例

2、EventBus

3、Application

4、持久化数据

以上就是Android Intent传递大量数据出现问题解决的详细内容,更多关于Android Intent传递大量数据的资料请关注编程网其它相关文章!

--结束END--

本文标题: AndroidIntent传递大量数据出现问题解决

本文链接: https://lsjlt.com/news/165506.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • AndroidIntent传递大量数据出现问题解决
    目录正文异常TransactionTooLargeExceptionIntent携带信息的大小受Binder限制为什么Binder要限制传输数据的大小替代方案正文 官方文档 ...
    99+
    2024-04-02
  • 递归出现栈溢出stackoverflow的问题及解决
    目录递归出现栈溢出stackoverflow递归调用中栈溢出原因递归出现栈溢出stackoverflow 递归是个不断回调方法的过程,使方法一遍遍的压入栈中,递归次数多了,栈满了也就...
    99+
    2024-04-02
  • MyBatisPlus 大数据量查询慢的问题解决
    目录常规查询流式查询MyBatis 流式查询接口游标查询大数据量操作的场景大致如下: 数据迁移数据导出批量处理数据 在实际工作中当指定查询数据过大时,我们一般使用分页查询的方式一页一...
    99+
    2023-02-05
    MyBatis Plus 查询慢 MyBatisPlus 大数据量查询
  • bat传递参数调用问题解决记录
    目录bat 传递参数1.问题描述:Syntax 1:Syntax 2:Syntax 3:2.问题描述:解决:bat 传递参数 调用bat时,传递参数有个小问题,记录一下。 1.问题描...
    99+
    2023-05-19
    bat 传递参数 bat 传参调用
  • java web开发中大量数据导出Excel超时(504)问题解决
    import java.io.IOException;import java.io.OutputStream;import java.lang.reflect.Field;import java.text.SimpleDateFormat;...
    99+
    2023-05-31
    java excel 数据导出
  • vue 动态路由component 传递变量报错问题解决
    目录menuList 后台数据返回格式路由里面componentmenuList 后台数据返回格式 { // 统计分析 path: '/statistics', ...
    99+
    2023-05-20
    vue 动态路由传递变量报错 vue component
  • margin-top的传递问题怎么解决
    这篇文章主要介绍了margin-top的传递问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇margin-top的传递问题怎么解决文章都会有所收获,下面我们一起来看看...
    99+
    2024-04-02
  • 解决Feign调用的GET参数传递的问题
    目录需求思考GET方式请求①GET方式请求②GET方式请求③需求 ​ 在消费方服务通过GET方式,访问服务提供方的接口,需要传递多参数,拆分成多个参数的方式访问,不太适合用在该场景,...
    99+
    2024-04-02
  • Mybatisplus出现数据库id很大或为负数问题怎么解决
    本文小编为大家详细介绍“Mybatisplus出现数据库id很大或为负数问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatisplus出现数据库id很大或为负数问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-07-05
  • $.ajax传JSON数据到后台出现报错问题该如何解决
    $.ajax传JSON数据到后台出现报错问题该如何解决,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收...
    99+
    2024-04-02
  • Python大数据量文本文件问题怎么解决
    这篇文章主要介绍“Python大数据量文本文件问题怎么解决”,在日常操作中,相信很多人在Python大数据量文本文件问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python大数据量文本文件问题怎...
    99+
    2023-07-04
  • 如何解决php传递页面参数乱码问题
    本文操作环境:Windows7系统,PHP7.4版,Dell G3电脑。如何解决php传递页面参数乱码问题?php get传值 中文参数 乱码问题的尝试解决:网站的中文参数是直接传的 例如 /index.phpt=你好所有页面均为utf-8...
    99+
    2015-06-19
    php
  • 如何解决jQuery.ajax向后台传递数组的问题
    小编给大家分享一下如何解决jQuery.ajax向后台传递数组的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!jQuery....
    99+
    2024-04-02
  • 怎么解决php传递页面参数乱码问题
    本篇内容主要讲解“怎么解决php传递页面参数乱码问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决php传递页面参数乱码问题”吧!php传递页面参数乱码的解决办法:1、打开相应的PHP代...
    99+
    2023-06-22
  • MongoDB超大块数据问题解决
    目录引言一、MongoDB服务器管理1、添加服务器2、修改分片中的服务器3、删除分片二、均衡器三、修改块的大小四、超大块1、分发超大块2、分发超大块步骤:3、避免出现超大块4、输出内容详解:五、系统分析器六、一些常见的辅...
    99+
    2023-02-09
    MongoDB超大块数据 MongoDB大块数据
  • Excel数据导入Mysql常见问题汇总:如何解决导入大量数据时内存溢出的问题?
    Excel数据导入Mysql常见问题汇总:如何解决导入大量数据时内存溢出的问题?导入Excel数据到Mysql数据库是一个常见而重要的任务,在处理大量数据时,有时会遇到内存溢出的问题。本文将介绍一些解决这一问题的方法。拆分数据:如果Exce...
    99+
    2023-10-22
    Excel MySQL 内存溢出 解决问题 导入
  • 如何解决使用ajax传递json到前台中文出现问号乱码的问题
    这篇文章主要为大家展示了“如何解决使用ajax传递json到前台中文出现问号乱码的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决使用ajax传递js...
    99+
    2024-04-02
  • C++ 递归函数的栈溢出问题如何解决?
    针对 c++++ 递归函数的栈溢出问题,解决方法有:缩小递归深度、减小栈帧大小、尾递归优化。如 fibonacci 数列函数通过尾递归优化可避免栈溢出。 C++ 递归函数的栈溢出问题如...
    99+
    2024-04-17
    c++ 递归函数
  • 如何解决Mysql大量数据导入遇到的问题
    这篇文章主要介绍如何解决Mysql大量数据导入遇到的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在项目中,经常会碰到往数据库中导入大量数据,以便利用sql进行数据分析。在导入数...
    99+
    2024-04-02
  • mysql导出数据量过大如何解决
    当导出的数据量过大时,可以尝试以下方法来解决问题: 使用数据库工具:使用数据库管理工具如Navicat或MySQL Workbe...
    99+
    2024-05-14
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作