在Android中构建树视图控件的建议
我想弄清楚Android布局和视图的主要有效性问题.我现在正在做研究,但也许有人已经有了答案.
我有一个RelativeLayout动态填充视图.基本上,应用程序以XML格式加载论坛帖子,然后呈现讨论树,以便每条消息都显示在自己的视图组中.我决定不使用,WebView因为我想实现一些客户端函数,这些函数应该在自定义视图上比在HTML页面上更容易.
然而,这种方法有一个重大缺陷:它很重.
第一个问题(我已经解决了)是嵌套视图.现在这不是问题,我的布局几乎是平的,所以最大深度是10-12(从最顶级的PhoneWindow $ DecorView算起,实际深度取决于数据).
现在我已达到下一个限制,该限制以某种方式与视图的资源消耗相关联(或由其引起).加载数据后,应用程序挂起一段时间来构建布局(创建视图并用数据填充它们),挂起时间似乎与数据大小成线性关系; 如果数据足够大,视图将永远不会出现(最终系统建议关闭应用程序,因为它没有响应).
现在的问题是:
内存消耗是否显着依赖于视图类?换句话说,有没有之间的主要差异Button和TextView,或ImageView?我可以将点击处理程序附加到任何视图,因此它们的使用差别不大.
背景图像会影响性能吗?如果在N视图中设置了相同的图像,它会使布局N时间更重吗?(我知道这个问题可能看起来很傻但无论如何.)
9个补丁图像是否比常规图像重得多?什么是更好的:创建N每个都有一些背景图像的视图,或者使一个视图N更广泛并具有重复背景?
给定一些布局,首先应该优化什么:总视图数,嵌套级别或其他什么?
最有趣的.是否可以衡量或至少估计活动及其观点所消耗的资源?如果我做出一些改变,我怎么能看到我走对了路?
UPDATE
感谢User117,我现在回答了上面提到的一些问题.我已经使用了Hierarchy Viewer并优化了我的布局:与之前相比,现在整体视图数量减少了两倍,嵌套也减少了.
但是,该应用程序仍然挂在一个大型论坛帖子上.
更新2
我已将调试器连接到我的设备,发现应用程序内存不足.
但对我来说非常意外的是,在填充布局后发生错误.顺序如下:
[global] Loaded time zone names for en_US in XXXXms唯一的区别是毫秒数.[dalvikvm-heap] Out of memory on a N-byte allocation实际大小不同).长错误报告开始.这是什么意思?看起来渲染有其可能相当大的要求.
更新3
最后我找到了核心问题.这是我的应用程序的屏幕截图,请参阅图像下方的说明.

每条消息都包含一个显示或隐藏回复的圆形按钮和一个位于按钮右侧的红色内容框.这非常简单,只需要6个视图,包括布局.
问题是这些连接线的缩进显示哪个消息与哪个消息相关.
在我目前的实现中,缩进是由小ImageView的构建的,每个都包含一个方形图像,显示空白区域,垂直线条,T形连接器或L形角.所有这些视图在RelativeLayout包含整个讨论树的大型内部彼此对齐.
这适用于中小型树(最多几百条消息),但是当我尝试加载一棵大树(2K +消息)时,我得到上面更新2中解释的结果.
显然,我在这里有两个问题.我产生大量消耗内存的视图,这些视图 …