Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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使用Parcelable在活动之间发送数据_Android_Android Intent_Arraylist_Parcelable - Fatal编程技术网

Android使用Parcelable在活动之间发送数据

Android使用Parcelable在活动之间发送数据,android,android-intent,arraylist,parcelable,Android,Android Intent,Arraylist,Parcelable,在我的应用程序中,我想在两个活动之间传递一个Parcelable对象的ArrayList(或Parcelable[])。在第一个活动中,我调用restservice来获取json数据,然后我使用gson获取Parcelable对象的List,然后使用putParcelableArrayListExtra(…)将列表发送到第二个活动。在列表的大小大约为1000之前,一切都可以正常工作,但超过这个大小,我会得到一个ANR,即使我等待几分钟,应用程序也不会恢复 是否有解决此问题的方法来维护此方法?这是

在我的应用程序中,我想在两个活动之间传递一个
Parcelable
对象的
ArrayList
(或
Parcelable[]
)。在第一个活动中,我调用restservice来获取json数据,然后我使用gson获取
Parcelable
对象的
List
,然后使用
putParcelableArrayListExtra(…)
将列表发送到第二个活动。在列表的大小大约为1000之前,一切都可以正常工作,但超过这个大小,我会得到一个ANR,即使我等待几分钟,应用程序也不会恢复

是否有解决此问题的方法来维护此方法?这是由于目标对象的大小限制造成的吗


我知道我可以传递Json字符串,然后在第二个活动中获取列表,但我更喜欢先进行此类操作。

首先,确保ANR的源确实是大的可包裹对象,而不是因为您在主线程上执行阻塞操作(即联网)

现在,如果ANR问题确实是由于这些大型对象造成的,那么正确的方法是反序列化对象并将其写入存储,而不是在活动之间传递它。实际上,你正在做的事情会使你的记忆量翻倍

以下是解决此问题的几种方法:

  • StrictMode最常用于捕获应用程序主线程上的意外磁盘或网络访问,在主线程中接收UI操作并执行动画。通过保持应用程序的主线程响应,还可以防止向用户显示ANR对话框

  • Traceview是一种图形查看器,用于查看Android应用程序创建的日志。通过Traceview,您可以发现应用程序中的错误并测量其性能

  • 您可以创建内存快照并使用Eclipse内存分析器对其进行分析


我确信ANR是由于大包裹造成的,因为网络请求是在异步任务中完成的,在检索结果后,我将结果放入意图中并启动新活动,而新活动不会显示…@danidif如果是这样,您必须进行故障排除,以查看到底发生了什么(使用StrictMode、Traceview等)。我怀疑您的内存不足,这就是为什么我建议反序列化(并将其写入存储)而不是传递它的原因。它还尝试将整个json字符串传递给Intent,并在第二个活动中使用gson获取对象,结果是:JAVA绑定事务失败。。。