我很想在Manifest中使用Android:LargeHeap =“true”选项来获得额外的内存(我们在高分辨率的1980×1200显示器上处理5 MB位图,并且很快就会看到更大的显示器.
我已经完成了处理Android中用于位图的糟糕内存处理的所有常规技巧(即,无法知道碎片内存中是否存在足够大的洞,而不是试图祈祷它不会崩溃).我已经花了数周优化,修剪和应用其他技巧来最小化内存并防止崩溃.这是在2.x vs 3.x / 4.x中可以完成哪些功能的技巧,但是将它们全部保存在一个应用程序中.无需指出“如何优化位图” – 我已经完成了这些并应用了我能做到的事情.
版本2.x不支持LargeHeap,并且我在2.x中不需要LargeHeap选项的较低分辨率屏幕使用不同的图像. (也没有内存不足问题).
当android:minSdkVersion =“8”时,它根本不允许使用Android:LargeHeap选项.
有没有办法有条件地为包含3.x的系统包含LargeHeap,并在2.x中忽略它?或者如果检测到3.x,应用程序本身是否尝试设置LargeHeap?我找不到任何办法,但也许我忽略了一些技巧.
我也意识到LargeHeap相当糟糕,但我们已经没有其他技巧了.理想情况下,只有在OnCreate程序中真正需要(和允许)时,以编程方式执行LargeHeap会很好.
解决方法:
When android:minSdkVersion=”8″, it will not allow the Android:LargeHeap option at all.
是的,它会的.
现在,如果您的构建目标(例如,属性> Android)设置为API级别8,则无法编译.您需要使用构建目标API级别11或更高版本进行编译.但android:minSdkVersion与它无关.旧设备上只会忽略该选项.
Is there any way to conditionally include LargeHeap for systems with 3.x, and have it ignored for 2.x?
在< application>中使用android:largeHeap =“true”清单中的元素.
Or have the application itself attempt to set LargeHeap if 3.x is detected?
AFAIK,没有程序化手段来设置它.