Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android棉花糖应用程序崩溃大型arrayList_Android_Arraylist_Android 6.0 Marshmallow - Fatal编程技术网

android棉花糖应用程序崩溃大型arrayList

android棉花糖应用程序崩溃大型arrayList,android,arraylist,android-6.0-marshmallow,Android,Arraylist,Android 6.0 Marshmallow,让一个应用程序生成从rest调用收集的数据的arrayList。arrayList用于支持listView的适配器中。有一个案例,arrayList的大小达到999个条目 应用程序通过putExtra传递arrayList。arrayList用于填充listView。调用startActivity时,应用程序崩溃,而不会生成stacktrace中记录的堆栈跟踪 arrayList的大小是否有限制?已在已启动的活动中设置调试断点,并且在调用super onCreate方法后立即发生崩溃 关于如何调

让一个应用程序生成从rest调用收集的数据的arrayList。arrayList用于支持listView的适配器中。有一个案例,arrayList的大小达到999个条目


应用程序通过putExtra传递arrayList。arrayList用于填充listView。调用startActivity时,应用程序崩溃,而不会生成stacktrace中记录的堆栈跟踪

arrayList的大小是否有限制?已在已启动的活动中设置调试断点,并且在调用super onCreate方法后立即发生崩溃


关于如何调试这个的想法?已经能够通过一个390条目的arrayList而不会崩溃

正如@commonware所说,有一个<1MB的限制,但在实际操作中远远小于这个限制,一旦需要传递超过几百KBs的数据,就需要使用其他程序来传递数据

最常见的方法是将其保存到本地数据库或其他类型的存储中,然后在另一个活动中查询数据(为了方便以后只传递查询列表所需的数据),而不是一次加载所有数据,您可以使用游标加载程序,以便只根据需要加载数据

另一种方法是通过添加一个静态字段将数据传递给另一个活动,然后在加载时读取值并将其删除,您将面临的问题是,这不是线程安全的,也不会解决执行onSavedInstanceState时如何处理其他活动上的数据的问题,因为您将遇到相同的1MB问题。[警告:这是你能想到的最糟糕的解决方案,因此,在尝试此解决方案之前,请尝试其他任何解决方案,这就是为什么我首先给了你一个非常好的方法,并在最后放弃了此方法]

[更新:


顺便说一句,第一种方法是我们如何在Microsoft Band应用程序上解决这个问题,因为我们有很多数据作为长期运行的一部分(GPS点和其他跟踪数据)。只需确保数据不足以在其他地方产生瓶颈,我们过去只将其缓存在内存中,从不将其发送到磁盘,以避免序列化过程或从存储中保存和检索所需的时间。

正如@commonware所说,有一个<1MB的限制,但在实际操作中,这个限制要小得多,一旦需要传递超过几百KBs的数据,就需要使用其他过程来传递数据

最常见的方法是将其保存到本地数据库或其他类型的存储中,然后在另一个活动中查询数据(为了方便以后只传递查询列表所需的数据),而不是一次加载所有数据,您可以使用游标加载程序,以便只根据需要加载数据

另一种方法是通过添加一个静态字段将数据传递给另一个活动,然后在加载时读取值并将其删除,您将面临的问题是,这不是线程安全的,也不会解决执行onSavedInstanceState时如何处理其他活动上的数据的问题,因为您将遇到相同的1MB问题。[警告:这是你能想到的最糟糕的解决方案,因此,在尝试此解决方案之前,请尝试其他任何解决方案,这就是为什么我首先给了你一个非常好的方法,并在最后放弃了此方法]

[更新:


顺便说一句,第一种方法是我们如何在Microsoft Band应用程序上解决这个问题,因为我们有很多数据作为长期运行的一部分(GPS点和其他跟踪数据)。只要确保数据不足以在其他地方产生瓶颈,我们过去只将其缓存在内存中,从不将其发送到磁盘,以避免序列化过程或从存储中保存和检索所需的时间

“调用startActivity时,应用程序崩溃,而不会生成stacktrace中记录的堆栈跟踪”--那么您如何知道应用程序崩溃了?“arrayList的大小有限制吗?“--整个
意图
必须在1MB以下。通过
Intent
extra传递大型
ArrayList
不是一个好计划。“已在已启动的活动中设置调试断点,并且在调用super onCreate方法后立即发生崩溃”--请尝试在调试器外部运行应用程序,以允许堆栈跟踪到达LogCat。谢谢。我知道应用程序崩溃了,因为它的GUI演示消失了。已在非调试模式下运行应用程序,但仍无法获取堆栈跟踪。将检查超过1MB限制的可能性。“因为它的GUI演示消失了”——这通常不是崩溃的症状,尽管这有点取决于你的应用程序是如何编写的。如果您使用的是Android Studio,请切换到LogCat中的“无过滤器”(而不是基于应用程序进行过滤),并查找堆栈跟踪。编写应用程序的目的是将gui保持在前台,直到用户关闭。将转储logcat,而不将应用程序名称变灰。我最近遇到了这个问题,您应该会收到一条消息,如“BINDER TRANSACTION FAILED”或类似消息,这意味着它在编组/解编组过程中失败-commom cause TRANSACTION太大。一个合理的解决方案是将ArrayList分解为多个部分,然后封送/DWMarshall它们。在接收端,继续添加到新数组列表中,直到完成为止。您可以添加一个唯一的信息,有多少个包部件,这样您就可以知道ArrayList何时完成,以及一个包id。如果您真的不想烫发,这对我很有用