Sam*_*lks 3 database performance android android-intent android-activity
我刚开始一份新工作,正在开发一个需要在应用程序周围传递大量数据的应用程序.目前,该应用程序使用持久存储,并且不断查询SQL数据库以向用户提取和显示这些大型数据集.由于所有这些昂贵的操作,应用程序几乎无法使用(太多的加载旋转器用于花费太长时间的操作).我的解决方案是在启动主活动时加载数据,然后根据需要将其传递给任何新活动.
我用一个数据集实现了这个变化的第一阶段.但是,当我尝试使用intent的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 android.app.ApplicationThreadProxy@42b32678 (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)
Run Code Online (Sandbox Code Playgroud)
其中,基于此stackoverflow帖子:使用Crop intent获取java.lang.SecurityException:无法找到调用者android.app.ApplicationThreadProxy@4266ae80的应用程序以及使用较小的数据集进行测试我发现(几乎可以肯定)是由于通过intent extras bundle发送过多数据.
我有两个问题.
我还应该提一下,由于app的可用性要求,逐步加载数据不是一种选择.
是的,有一个限制,但没有详细记录它的大小.
有人说你不应该试图将大于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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1738 次 |
| 最近记录: |