4
|
Daniel Benedykt · 技术社区 · 15 年前 |
1
7
我发现开发Android应用程序最常见的错误之一是
我经常在改变方向后使用大量位图的活动中发现这个错误:活动被破坏,重新创建,布局是由消耗位图可用的虚拟机内存的XML膨胀而来的。 垃圾收集器没有正确释放上一个活动布局上的位图,因为它们交叉引用了对其活动的引用。经过多次实验,我找到了一个很好的解决这个问题的方法。 首先,设置 身份证件 XML布局父视图的属性:
然后,在
此unbindDrawables()方法递归地探索视图树,并:
|
2
2
这个答案有两部分 1)它不是屏幕上有多少图像,而是在完成活动时仔细清理所有内容。 要避免的技巧,3:与布局一起出海 由于视图呈现基础结构的变化,布局中不合理的深度(超过10个左右)或广度(总共超过30个)视图层次结构现在可能导致崩溃。对于过于复杂的布局来说,这总是一个风险,但是你可以认为android 1.5在暴露这个问题上比1.1好。大多数开发人员不需要担心这个问题,但是如果你的应用程序有非常复杂的布局,你需要把它放在一个饮食上。可以使用更高级的布局类(如framelayout和tablelayout)简化布局。 丹尼尔 |
3
1
内存量因设备而异,您必须使用的内存量取决于系统当时的其他操作。你最好的办法是,如果你能帮忙的话,你甚至不会接近耗尽系统的内存。你在做什么?你需要屏幕上那么多图像? |
4
1
这取决于手机的堆大小。 因此,如果您的应用程序获得更多堆,那么提供的电话可能会造成问题。 新一代安卓设备包含。以下是一些
HTC WildFire(2.2.1)=16MB。
因此,目前还没有针对它的certan解决方案,但是您可以尝试优化位图的大小。 例如,使用位图后回收它。或者再利用 位图法 脱除 采样器 . 如果您使用的是模拟器,那么您可以创建一个包含更多堆大小的设备,以在AVD管理器中添加新的额外硬件配置,使VM堆大小等于或大于32。 |
5
0
我在工作中遇到了同样的问题,但我没有找到解决办法。 在通过OutOfMemoryException反复调用CreateImage()后,应用程序崩溃。我的猜测是,这不是由活动或上下文泄漏引起的,因为我的应用程序在遇到此问题时始终保持活动状态。 我试过调试堆,看看是否有什么有用的东西,但是无法访问位图内存空间(我试过g1 1.6,可能是1.5)。所以不知道那里发生了什么(有没有可能的解决办法?). 我不太确定是什么原因,可能是内存泄漏或内存碎片问题? 感谢您的帮助! 谢谢。 纪尧姆 |
Abhilash Das · 输入文本时,编辑文本与工具栏重叠 1 年前 |
Community wiki · 局部变量可能尚未初始化 1 年前 |
jvargas · 如何获取上个月的第一天和最后一天以及一年的第一天 1 年前 |