android– 通过意图传递大量数据的崩溃 – 附加组件是否有大小限制?

android– 通过意图传递大量数据的崩溃 – 附加组件是否有大小限制?,第1张

概述我刚开始一份新工作,正在开发一个需要在应用程序周围传递大量数据的应用程序.目前,该应用程序使用持久存储,并且不断查询SQL数据库以向用户提取和显示这些大型数据集.由于所有这些昂贵的 *** 作,应用程序几乎无法使用(太多的加载旋转器用于花费太长时间的 *** 作).我的解决方案是在启动主

我刚开始一份新工作,正在开发一个需要在应用程序周围传递大量数据的应用程序.目前,该应用程序使用持久存储,并且不断查询sql数据库以向用户提取和显示这些大型数据集.由于所有这些昂贵的 *** 作,应用程序几乎无法使用(太多的加载旋转器用于花费太长时间的 *** 作).我的解决方案是在启动主活动时加载数据,然后根据需要将其传递给任何新活动.

我用一个数据集实现了这个变化的第一阶段.但是,当我尝试使用intent的extras包中的所有这些数据传递ArrayList时,我收到以下错误:

04-27 06:42:32.022: E/AndroIDRuntime(14180): FATAL EXCEPTION: main04-27 06:42:32.022: E/AndroIDRuntime(14180): Process: com.myprocess, PID: 1418004-27 06:42:32.022: E/AndroIDRuntime(14180): java.lang.SecurityException: Unable to find app for caller androID.app.ApplicationThreadProxy@42b32678 (pID=14180) when publishing content provIDers04-27 06:42:32.022: E/AndroIDRuntime(14180):    at androID.os.Parcel.readException(Parcel.java:1472)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at androID.os.Parcel.readException(Parcel.java:1426)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at androID.app.ActivityManagerProxy.publishContentProvIDers(ActivityManagerNative.java:2977)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at androID.app.ActivityThread.installContentProvIDers(ActivityThread.java:4591)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at androID.app.ActivityThread.handleBindApplication(ActivityThread.java:4522)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at androID.app.ActivityThread.access00(ActivityThread.java:151)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1381)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at androID.os.Handler.dispatchMessage(Handler.java:110)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at androID.os.Looper.loop(Looper.java:193)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at androID.app.ActivityThread.main(ActivityThread.java:5292)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at java.lang.reflect.Method.invokeNative(Native Method)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at java.lang.reflect.Method.invoke(Method.java:515)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:640)04-27 06:42:32.022: E/AndroIDRuntime(14180):    at dalvik.system.NativeStart.main(Native Method)

其中,根据这个stackoverflow帖子:Using Crop intent Getting java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy@4266ae80以及使用较小的数据集进行测试我发现(几乎可以肯定)是通过intent extras bundle发送过多数据引起的.

我有两个问题.

>首先,我的评估听起来是否正确?我无法找到过去四年中明确指出附加组件有大小限制的任何内容(2012年之前和之前有很多).
>假设我是正确的,我打算使用单例来存储太大而无法作为意图传递的数据集,然后执行必要的检查以确保它与活动生命周期一起工作(重新加载)如果活动被销毁并且我放松了数据,则从数据库中获取).还有其他建议吗?我知道这不是最佳实践,但我想不出更好的方法.

我还应该提一下,由于app的可用性要求,逐步加载数据不是一种选择.

解决方法:

是的,有一个限制,但没有详细记录它的大小.

见:Max size of string data that can be passed in intents

有人说你不应该试图将大于90kb的任何东西传递给Intent附加组件.所以限制似乎非常紧张.

你的选择:

>将数据存储在任何易于读取的临时文件中,并将文件指针传递给该文件.
>将数据存储在应用程序的Application实例中,而不是作为单例存储,而是通过(MyAppInstance)context.getApplicationContext()访问.

最后一个选项的示例:

注意:您可能希望同步对数据的访问.

public class MyAppInstance extends Application {    private Object data = null;    public voID setMyData(Object data){        this.data = data;    }    public Object getMyData(){        return data;    }}MyAppInstance app = (MyAppInstance) context.getApplicationContext();app.setMyData(whatever);whatever = app.getMyData();
总结

以上是内存溢出为你收集整理的android – 通过意图传递大量数据的崩溃 – 附加组件是否有大小限制?全部内容,希望文章能够帮你解决android – 通过意图传递大量数据的崩溃 – 附加组件是否有大小限制?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1108309.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存