在我的应用程序中,我想在两个活动之间传递ArrayList
个Parcelable
个对象(或Parcelable[]
)。在第一个活动上,我调用restservice来获取json数据,之后我使用gson获取List
Parcelable
个putParcelableArrayListExtra(...)
对象,然后使用{{1}}将列表发送到第二个活动。一切正常,直到列表的大小约为1000,但超过这个大小,我得到一个ANR,即使我等待几分钟,应用程序也不会恢复。
是否有解决此问题的解决方案?这是由于对象的大小限制吗?
我知道我可以传递Json字符串,然后获取第二个活动的列表,但我更喜欢先做这种操作。
答案 0 :(得分:0)
首先,确保ANR的源确实是大型可分配对象,而不是因为您在主线程上执行阻塞操作(即网络连接)。
现在,如果ANR问题确实是由于这些大型对象造成的,那么正确完成此操作的方法是反序列化对象并将其写入存储而不是在活动之间传递它。通过做你正在做的事情,你实际上会增加你的记忆量。
以下是一些解决此问题的方法:
StrictMode: StrictMode最常用于捕获应用程序主线程上的意外磁盘或网络访问,其中接收UI操作并进行动画制作。通过保持应用程序的主线程响应,还可以防止ANR对话框显示给用户。
Traceview: Traceview是一个图形查看器,用于查看Android应用程序创建的日志。通过Traceview,您可以在应用程序中找到错误并衡量其性能。
Memory Dump:您可以使用Eclipse Memory Analyzer创建内存快照并对其进行分析。