当前位置: 首页 > 面试题库 >

Intent.putExtras大小限制?

易烨磊
2023-03-14
问题内容

我试图通过Intent.putExtras这样将数据从一个活动传递到另一个活动:

private ArrayList<HashMap<String, String>> mGroups = new ArrayList<HashMap<String, String>>();
private ArrayList<HashMap<String, String>> mUsers = new ArrayList<HashMap<String, String>>();
...

Bundle data = new Bundle();
data.putInt("mode", mode);
data.putSerializable("groups", (Serializable) mGroups);
data.putSerializable("users", (Serializable) mUsers);
data.putInt("current_class", mCurrentClassId);
data.putInt("current_user", mCurrentUserId);

Intent intent = new Intent(ctx, ChildActivity.class);
intent.putExtras(data);
ctx.startActivityForResult(intent, 0);

mUsersHashMap<String,String>包含用户数据的列表,包括Base64编码的照片,此列表中字符串大小的总和约为500Kb

打电话到startActivityForResult黑屏挂了几分钟,然后出现ANR错误。onCreate完全不调用子活动。

如果我不向mUsers中添加大字符串(没有Base64编码的照片),则可以正常工作。

请帮忙。


问题答案:

如果两种活动都是您的,请使用体面的数据模型。Android不鼓励设计精良的应用程序。或换种说法,它允许快速开发应用程序,而不会促进很多好的软件应用程序html" target="_blank">原理。

@ Jean-Philippe Roy(québec?)的解决方案很有趣,但单身人士在涉及更复杂的事物(即全状态模型或serviceS)时,是一种反模式。

最好的选择是使用应用程序类。这个类是您的单例,自然是在android中。所以,

  • 在清单中定义应用程序类
  • 提供静态方法来访问应用程序类的唯一实例(始终为单例)。
  • 给它一种方法来接收和保存您的数据,从您的第一个活动中调用它
  • 第二个让他们重新参加第二个活动

-–在@straya的回答和18个月以上的Android编程后更新:)

在构建Android应用程序时,始终会想到在应用程序,活动,视图,片段之间共享数据结构或流程的问题。重要的是要知道并考虑到应用程序范围是保存共享结构的正确位置,但是就以下方面而言,使用应用程序类本身在该范围中放置数据结构是不可行的:

  • 代码质量,如果应用程序了解所有共享数据结构和过程,它将很快因所有这些实体的访问器而变得肿。
  • 全球只有一个整体的实体共享池,它的粒度不够,可能导致难以检测耦合实体的方式

我现在倾向于使用依赖注入管理的单例。Dagger或RoboGuice都允许创建给定类的单个实例并将其注入其他类。这项技术以及DI通常为良好的Android设计提供了巨大的可能性:

  • 不会降低代码质量,甚至可以缩短很多时间。使用@Inject注入依赖项,它们将被注入。
  • 不要给单例类提供2个责任:它将不处理单例实例的创建,框架会做到这一点。
  • 从单例传递到普通实例更容易
  • 当这些单例成为带有简单注释的普通类时,它们不再包含静态方法,因此可以非常轻松地模拟它们。这很重要。
  • 当然,当一个类依赖于另一个类时,DI注释也可以很清楚地帮助自己编写代码。


 类似资料:
  • 问题内容: 如果我在表中有一列具有类型字段,并且如果我尝试插入长度为16的数据,MySQL会提示错误 有谁知道为什么MySQL中的VARCHAR字段采用固定长度?另外,基于给定的大小,每个记录的VARCHAR字段会占用多少字节? 问题答案: 如果将一列设置为允许的最大字节数为15,则在不修改该列以使其支持超过15个字符的情况下,最多不能传递15个字符。如果存储4个字符串,则只能使用约4个字节可能的

  • 问题内容: 我正在使用PHP代理来获取文件的内容。我想使用功能强大的jQuery选项搜索该文件,而不必在PHP中编写各种查询。这是我的PHP代码: 如果加载的页面太大,PHP将读取整个文档,但是json_encoding它只会提供文件的第一部分,而不是整个文件。我找不到有关JSON传递数据的大小限制的任何信息,但显然有一个。 问题:是否有变通办法来防止仅部分文件被传输? 我需要从其他域中获取文件,

  • 问题内容: elasticsearch新手。编写搜索查询返回我集合中所有匹配的记录时遇到问题。以下是我对搜索记录的查询 通过运行此查询,我最多只能获取10条记录,请确保我的集合中有10条以上匹配的记录。我搜索了很多,最后在查询中得到了大小参数。但就我而言,我不知道记录总数。我认为给size变量一个无限的数字不是一个好习惯,因此如何处理这种情况请帮助我解决此问题,谢谢 问题答案: 显示所有结果不是很

  • [3]#load#27(::base.iterators.pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}},::function,::file{DataFormat{:jld2}})在/path/.julia/packages/fileio/y0lre/src/loadsave.jl:193 [4]在/path/.julia/package

  • 问题内容: 我有时编写Python程序,这些程序很难确定执行前将使用多少内存。因此,有时我会调用一个Python程序,该程序试图分配大量RAM,从而导致内核大量交换并降低其他正在运行的进程的性能。 因此,我希望限制Python堆可以增长多少内存。达到限制后,程序可能会崩溃。最好的方法是什么? 如果重要的话,很多代码都用Cython编写,因此应该考虑在那里分配的内存。我还没有嫁给一个纯粹的Pytho

  • 问题内容: 在HighChart中,我需要针对x和y轴绘制一系列数据。HighChart希望数据为json格式。即[[x,y],[x,y]……[x,y]]。其中x和y是时间(1392345000-Unix纪元格式)和值(49.322)。因此,我正在进行ajax调用以获取数据,并成功将json返回的数据渲染为highchart。在大多数情况下,即,如果data([x,y])的计数低于87500行,则