- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在制作一个素描应用程序,主要是为了好玩。但是我遇到了问题。
在我的应用中,用户可以“翻转”他们已经绘制的草图。这些草图只是 400x800 位图。但是我经常遇到内存不足的错误。
用户一离开草图,草图就会被保存到 SD,然后它们会被释放...
if(bitmap != null)
{
bitmap.recycle();
bitmap = null;
}
因此,在任何给定时间,在保存和释放它们之前,只应将一两个位图加载到内存中。通过一些调试打印,我确定这是真的(内存中最多同时有两个位图)。我的问题是,在 14 次加载/释放后,程序崩溃并出现 OutOfMemoryError。总是 14,无论我在“翻转”之间等待多长时间。
我尝试打开 DDMS 来查看设备的内存分配情况。奇怪的是,每次释放图像时,内存都会进入“未知”部分,而不是“空闲”部分。这种情况一直持续到只剩下一小片“空闲”内存,此时发生崩溃(并且“未知”内存变为“空闲”)。
经过大量谷歌搜索,我发现一些资源说位图应该是 deallocated as expected ,以及 Dalvik garbage collections always occur before an out of memory error .还有一些杂项页面表明 Bitmap 使用的所有内存都在 GC 时释放( native 堆和 JVM 堆类似)
我应该注意到,在这一点上,我正在两部不同的手机上进行测试。摩托罗拉 Droid X(库存图片,Android 2.3.3)和三星 Galaxy S3(Cyanogenmod 9,Android 4.0.4)。两者都表现出完全相同的行为。我的 android 工具在所有 SDK 版本中都是最新的,我已经检查了一百万次以确保我的代码中没有其他任何东西在做任何奇怪的分配(在程序启动后几乎没有分配任何东西)。
那么,我应该如何正确地释放位图以使其被释放(不仅仅是“未知”),并且我可以在其他地方使用内存?作为一个补充问题,这个“未知”的内存池是什么,它的用途是什么?
编辑:语法和拼写,在平台上添加了一些注释。
最佳答案
使用大图(附近也有 1mb)。您可能会在应用程序标记集大堆 true 中使用 androidmanifest。而不是使用自定义 View 而不使用 imageview(因为太复杂并且需要比其他 View 更多)
关于Android解除分配位图进入 "unknown"内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217081/
如果我 mov, eax 12345 和之后的 mov var, eax (假设 var 是一个 32 位的 int 等..等等)并输出 var 稍后它会正确输出。 与 ax 相同。 mov ax,
我有这个代码: for($nrt=0; $nrt"; if($sidesIndexes[$nrt]==$nrt) { echo "am I in??? ".$sidesInde
我正在阅读The Go Programming Language的8.5章,并陷入一些代码。下面的代码列表。 func main() { naturals := make(chan int)
我写了一个 MySQL 查询用于将数据导出到文本文件。 查询运行成功,但结果与我的预期不符。 我想在列之间没有间距的结果。 select sample_export_record1_2013.
在普通的 Excel 窗口中,我可以打开 VBE 并通过触摸键序列插入一个新模块:ALT+F11、ALTim 全部不使用鼠标。有没有办法打开 VBE 并导航到 本工作手册 不使用鼠标的代码区域? 最佳
我正在使用 axios 发出 http 请求。在 .then() 内部,我正在使用另一个 axios 调用。最后,我有第三个 then(),它应该在第二个 then 之后运行,但实际上并没有这样做。
我需要在 cocos2d 项目中播放视频..我的问题是:如何将 MPMoviePlayerController 放入我的 View 中,如下所示:? UIView *theView = [[CCDir
我正在学习 Angular。以下代码有效: .controller('abc', function ($scope, $http) { $http.get("/Handlers/Authenticat
目前我正在使用 WPF 学习 C#。我的主要方法是尽我所能使用 MVVM 模式,但现在我有点困惑。 在我所有 View 的应用程序中,我有一个 View 模型: private DruckviewVi
关于将 G 邮件提取到 Google 电子表格,我该如何添加 IF 以按主题驳回特定电子邮件?例如:电子邮件回复(主题中带有“RE:”)。我不希望这些电子邮件出现在我的电子表格中。 我尝试过使用 LO
我正在尝试使用 Spotify API 并进入数组。 const App = () => { const [isLoading, setIsLoading] = useState(true);
我有一个 html 模板,并且有一个条件为 --> 的代码 --> window.jQuery || document.write(""+"");
我正在开发一个 Android 应用程序,该应用程序会暴力破解从 int 创建的 MD5 和。 暴力破解部分工作正常。 (我可以sysout最终值并且它是正确的。) 我在将输出值发送到警报对话框时遇到
我正在创建一个界面,用户可以通过该界面生成多系列折线图,并控制绘制哪些数据集。 要绘制哪些数据集由复选框控制。页面加载时,默认数据集以图表形式呈现,并且 $('input:checkbox.data-
我尝试将有向无环图绘制为力布局。 但是我注意到,尽管为每个组元素灌输了进入/退出条件,弹出的节点/链接并没有从 DOM 中删除它们自己。 相反,弹出的节点/链接在力布局中卡住;这意味着没有调用进入/退
这里是新手。我不知道它是怎么发生的,但我正在处理一个程序,当我去调试并进入时,黄色箭头走到了我代码的最后并跳过了整个 block 。有快速解决方法吗? 最佳答案 按 F11,或单击工具栏上的“Step
我的 Action 栏 sherlock 中有一个列表。我想在用户点击该列表时得到。我不想知道用户何时点击某个项目,我已经知道 (onNavigationItemSelected)。 在我的 onCr
** 你好 **我如何从 ci 中的 mysql 日期获取 eurodate 来工作......无法弄清楚 - 请帮忙 想要获取日期 YY-mm- dd -> dd-mm-yy提前致谢 最佳答案 $t
我有以下脚本: #!/bin/bash ls -1 | while read d do [[ -f "$d" ]] && continue echo $d cd $d done
TL;DR - 跳转到最后一段 背景 我正在执行一些数据驱动测试,并将日志文件用作测试输出之一。它的工作原理是这样的- 读取文件夹中的第一个文件 处理第一行并转换为测试 运行测试 执行验证 1 ...
我是一名优秀的程序员,十分优秀!