【发布时间】:2013-08-05 03:59:30
【问题描述】:
根据设计,Android 应用程序可以使用的堆内存量非常有限。 SDK 应用程序的限制在旧设备上低至 16MB。这种设计选择通常是有意义的,因为操作系统试图在内存通常非常低的设备上支持多任务处理 - 所以每个任务都有自己的小部分。
内存限制因设备而异。以三星 Galaxy S2 为例,每个应用程序的大小在 32MB-64MB 之间。此设备具有 1GB 的 RAM,因此单个任务只能使用设备所能提供的大约 5%。
值得一提的是,iOS 上的内存策略非常不同。据我所知,iOS 应用程序可以使用多少内存没有外部强制限制。您可以根据需要分配尽可能多的内存,直到系统内存不足。如果你太贪心,其他后台应用会被终止。
让我们解决这个问题 - 这不是讨论哪种内存策略更好。
Android 的内存限制对于某些 类型的应用来说是难以接受的。图形密集型应用程序(例如游戏)需要大量内存来保存位图。在默认限制下,即使是 Web 浏览器也应该很难实现。
当resource optimization 不够用时,克服内存限制的标准策略是使用NDK。 Android 中的“本机”堆没有人为限制,其行为与 iOS 上的堆非常相似。使用“本机”堆来保存位图效果很好 - 这实际上是位图 在 Android 2.3.3 及更低版本上保存的方式(尽管 JVM 仍然人为地限制了它们)。
我正在寻找一个 NDK+JNI 库来在“本机”堆中保存无限位图。它的 Java 接口应该与股票位图 API 相同。我不知道有任何为此目的的公共项目,并感谢您帮助找到一个。如果您以前实现过此功能并愿意分享您的代码,我们也将不胜感激。
最终评论:请不要讨论将这样的图书馆向公众开放的道德性。
【问题讨论】:
-
它的Java接口怎么能和股票位图API一样呢?
-
当然,它会在自己的新包中,但会提供类似于 Bitmap 和 BitmapFactory 的类,它们的方法与原始类几乎相同。只是为了让界面相似以便于过渡
标签: android memory-management bitmap android-ndk static-libraries