我刚开始一项新工作,正在开发一款应用程序,需要在应用程序周围传递大量数据。目前,该应用程序使用持久性存储,并不断查询SQL数据库以将这些大型数据集提取并显示给用户。由于所有这些昂贵的操作,该应用程序几乎变得无法使用(太多的操作需要太长时间的加载纺纱器)。我的解决方案是在主要活动启动时加载数据,然后根据需要将其传递给任何新活动。通过intents传递大量数据时发生崩溃 - extras包是否有大小限制?
我使用一个数据集实现了此更改的第一阶段。然而,当我试图通过ArrayList中的所有这些数据的意图的额外捆绑我得到了以下错误:
04-27 06:42:32.022: E/AndroidRuntime(14180): FATAL EXCEPTION: main
04-27 06:42:32.022: E/AndroidRuntime(14180): Process: com.myprocess, PID: 14180
04-27 06:42:32.022: E/AndroidRuntime(14180): java.lang.SecurityException: Unable to find app for caller [email protected] (pid=14180) when publishing content providers
04-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.access$1500(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)
其中,在此基础上计算器职位:Using Crop intent Getting java.lang.SecurityException: Unable to find app for caller [email protected]以及测试与较小的数据集我发现(几乎可以肯定)是由于通过intent extras bundle发送太多数据而造成的。
我有两个问题。
- 首先,我的评估听起来是否正确?过去四年里,我一直无法找到任何明确表示额外套餐有限制的内容(尽管从2012年开始还有很多)。
- 假设我是正确的,我打算使用单例来存储太大而不能作为意图传递的数据集,然后执行必要的检查以确保它与活动生命周期一起工作(re如果活动被破坏并且数据丢失,则从数据库加载数据)。还有其他建议吗?我知道这不是最好的做法,但我想不出一个更好的方法来做到这一点。
我还应该提到,由于应用程序的可用性要求,加载数据不是一种选择。
你的日志可能意味着,那就是这样的名字已经存在的ContentProvider,你不能注册一个,或者有一些与你的供应商。虽然它可能会有一些访问内容的缺失权限 –
ArrayList传递需要包裹可执行 – Haroon
我添加的唯一代码是在第一个活动中使用AsyncTaskLoader从数据库加载数据,然后将该数据传递给第二个活动意图。我绝对不会对内容提供商做任何事情。我的猜测是这个日志是指Android系统用来启动一个有意图的数据的日志。 –