最初从位图泄漏未引用的 byte[] 但被回收()导致内存泄漏(直到活动停止)

2024-05-07

我有位图内存泄漏导致内存不足。我在 Android 5.0(三星 S5)上运行了测试。我已经使用 Android Studio (1.5.1 + 2.0.0 Preview 7) 调查了这个问题。 HPROF 内存转储显示有多个 byte[] 与我暂时使用的特定巨大位图完全对应。如果我确保保留对位图的引用,那么 Android Studio 会向我显示一个 11MB 主尺寸的位图和一个 11MB 浅尺寸的字节[]。如果我不保留对位图的引用,那么一些位图将被垃圾收集,而一些位图最终会成为没有传入引用(即没有父级)的 byte[],如图所示。

我已经对我的应用程序进行了足够的测试,可以合理地确信这个 11MB byte[] 是我在内存中的大约 2891x1000x4 位图。一些较小的位图也会泄漏,并且显示时没有传入引用。

上面的位图是在子活动中分配的。如果我返回父活动(在同一进程中,因此是 dalvikVM)并强制执行 2x GC,则内存将被释放。多次手动 GC 在退出子活动之前不会释放内存。

它似乎与我是否运行 bitmap.recycle() 无关。如果我只是站在应用程序中的同一位置并运行从同一视图生成巨大位图的代码,这种情况很少发生。如果我在应用程序中移动并从不同视图生成位图,则出现的频率会更高,例如从 50% 泄漏到 10% 泄漏。

  • 这是安卓的bug吗?
  • 我是否以某种方式错误地使用了位图并且 Android studio 无法向我显示正确的内存视图?
  • 我的理解是否正确,如果下面的参考树中没有父级(参见图片),那么内存应该由垃圾收集器释放(因此它是 Android Bug 或 studio bug 或 hprof dump-bug?)

我找到了泄漏的解决方案,通过 Android Studio 报告未引用的 byte[] 仍然是一个谜。

看来我所做的 ImageView

imageView.setImageBitmap(bitmap)

将阻止对 byte[] 底层位图进行 GC。 bitmap.recycle() 没有帮助,unbinddrawables() 也没有帮助,正如许多地方所写的那样

if (imageView.getBackground() != null) {
    imageView.getBackground().setCallback(null);
}
setImageBackground(imageView, null);
imageView.setImageBitmap(null);
imageView.setImageDrawable(null);

当我从 viewhiearchy 中删除视图并删除我自己对该视图的所有引用时,byte[] 被 GC 处理,泄漏消失了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最初从位图泄漏未引用的 byte[] 但被回收()导致内存泄漏(直到活动停止) 的相关文章

  • 从ndk中的不同线程调用java方法

    我正在尝试使用 android 的 NDK 从 C 中的独立线程调用 java 静态方法 到目前为止我已经 JNIEnv env AttachJava jclass cls2 env gt FindClass com actvt showd
  • Android Volley:意外响应代码 405

    我的 Android Volley JsonObjectRequest 遇到 onErrorResponse 并出现以下问题 BasicNetwork performRequest Unexpected response code 405
  • 存储整数列表的最有效方法

    我最近一直在做一个项目 其中一个目标是使用尽可能少的内存来使用 Python 3 存储一系列文件 除了一个整数列表之外 几乎所有文件都占用很少的空间 大致333 000整数长且整数可达约8000在尺寸方面 我目前正在使用pickle存储列表
  • 将 React Native 应用程序嵌入到现有的 ios/android 应用程序中

    我需要知道是否可以在现有的 ios android 应用程序中 嵌入 一个 React Native 应用程序 而不共享 React Native 应用程序代码 我们目前有一个 React Native 应用程序 它使用一些插件依赖项 并被
  • SDK 管理器缺少模拟器的旧版 Android 系统映像

    我刚刚重新安装了 ADT 捆绑包 20130522 和 Android Studio 因为我的 eclipse 安装再次搞砸了 但那是另一个故事了 在任一版本中 当我启动 SDK Manager 时 都没有任何 2 2 的系统映像 只有 2
  • Android 套接字和 HTTP 响应标头

    有趣的是 我可能无意中找到了解决方案是否可以使用普通套接字连接发送 HTTP 请求并接收没有标头的响应 https stackoverflow com questions 8320574 我希望我忽略了一些东西 无论如何 我正在连接到 We
  • 尝试在谷歌地图V2 Android应用程序中获取空数组的长度

    我目前正在使用谷歌地图API开发一个Android应用程序 有时我会因为没有明显的原因而发生奇怪的崩溃 在我看来 这是崩溃日志 12 02 16 38 57 071 20796 21137 com appsolute ParkYoo E A
  • 什么时候会发生内存泄漏?

    我不知道在这里该怎么想 我们有一个作为服务运行的组件 它在我的本地计算机上运行得很好 但在其他一些计算机上 两台计算机的 RAM 都等于 2GB 它开始在第二天和连续几天生成 bad alloc 异常 问题是该进程的内存使用量保持在大约 5
  • Android Studio 与 Google Play 服务的编译问题

    我正在运行 Android Studio 0 8 4 并在 Android Studio 0 8 2 上尝试过此操作 我正在运行 Java JDK 1 8 0 11 并尝试使用 JDK 1 8 0 05 每当我尝试构建我的 android
  • 使用audioSessionId值实例化AudioFx类?

    我已经阅读了 Android API 并尝试在互联网上搜索有关声明自定义audioSessionId然后用它audioSessionId初始化 AudioFx 类并为我的 MediaPlayer 或 AudioTrack 分配硬编码audi
  • Android 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) libwebviewchromium.so

    对于 android 4 4 我多次收到 Native crash at system lib libwebviewchromium so 错误 以下是设备包括 Xperia Z1 SO 01F 16 30 2 Galaxy Tab4 7
  • 如何解决Android错误类型3?

    下面是我在项目中使用的清单格式 但是每当我尝试运行模拟器时 我都会收到下面提到的错误 请给我一个解决该错误的准确解决方案 工具信息 Android studio Nexus S API 22 android 5 1 1 我的清单文件格式
  • 地理围栏不可用以及如何处理

    我正在 Android 上使用地理围栏 它在大多数手机上都工作正常 但在其中一些上 它不起作用 在我的错误日志中显示 地理围栏不可用 某些用户没有为 Google Play 服务启用位置跟踪 我认为这就是地理围栏在他们的手机上不起作用的原因
  • Meteor:即使设置了 ANDROID_HOME 也未设置

    操作系统 Ubuntu 14 04 框架 流星1 1 0 2 应用名称 Songofy 这是输出meteor install sdk android meteor install sdk android Found Android bund
  • 如何像UCBrowser一样使用webview打开url

    我是安卓新手 我正在尝试制作一个示例应用程序来在 webview 中打开网站 问题是 网站以桌面模式打开 如何才能像UC浏览器 手机模式 一样打开网站 尝试这个 它应该有效 webview1 getSettings setJavaScrip
  • 如何检查设备上是否安装了电子邮件客户端

    我需要检查设备上是否安装了电子邮件客户端 我使用了以下代码 但它对我不起作用 public boolean isIntentAvailable final PackageManager packageManager getApplicati
  • AsyncTask的并行执行

    An 异步任务单击时执行 List
  • 无法 ACTION_VIEW 外部存储上的文件

    我的 Android 手机的外部存储中有一个文件 在本例中是模拟的 知道通往它的路径和 或拥有File代表它的对象 我如何使用Intent在适当的应用程序中打开它 我尝试的第一件事是 startActivity new Intent Int
  • Android 可扩展列表视图随机播放子项

    你好 我正在使用 Android Expandable listview 并用不同的视图在其中膨胀子视图 我遇到的问题是 当我展开视图然后打开另一个父视图时 布局中的子视图会变得混乱并在代码中膨胀错误的布局 这是我的两个项目的示例代码 这是
  • Android:通过查找带有标签而不是 ID 的容器来添加片段

    我正在使用 for 循环创建片段的多个实例 在每个片段中 我需要添加另一组子片段 为此 我需要找到正确的容器 如果我使用容器的 ID 所有子片段都会添加到第一个父片段 而不是它们自己的父片段 在我的主要片段中 for ParentFragm

随机推荐

  • 如何从命令行运行 Xamarin.UITest?

    我想在我的构建服务器上运行测试 使用 Xamarin UITest 进行 该服务器在 OS X 上运行 TeamCity 我已经在线搜索了如何执行此操作 但我只能找到如何将这些测试提交到 Xamarin Test Cloud 这不是我想要的
  • 如何从Entity中postLoad的LifecycleEventArgs获取Container对象?

    我正在尝试使用以下方法将容器对象 在控制器中可用 注入到实体中postLoad lifecycleCallbacks 论点postLoad方法是LifecycleEventArgs 我可以看到容器属性 我想检索 EventManager o
  • HTML 带点尾的大文本

    如果文本大小大于应用点指示的更多文本 我想在固定大小的 div 内显示文本 example 如果 div 内可以显示的文本数量是 10 那么 文本 澳大利亚 应显示为 澳大利亚 文本 United States Of America 应显示
  • 白色像素簇提取

    我正在研究指纹毛孔提取项目 并陷入毛孔 白色像素簇 提取的最后阶段 我有两个输出图像 我们可以从中获取毛孔 但不知道该怎么做 这两个图像的尺寸不同 image1 的尺寸为 240 320 image2 的尺寸为 230 310 这是我的图像
  • 如何使我的网络应用程序兼容 iPhone 5?

    我有一个使用 iOS safari 优化为 Web 应用程序的网站 因此添加到主屏幕会在单独的 Web 视图中打开该应用程序 然而 它总是以 3 5 信箱模式打开 而不是拉伸以填充屏幕 我知道使用本机应用程序 您只需添加 iPhone 5
  • 如何修复:AttributeError:模块“neat”没有属性“config”

    我正在浏览使用发现的 NEAT 神经网络 API 玩 flappybird 的 AI 的指南 当我运行从 Github 下载的代码时 出现错误 Traceback most recent call last File test py lin
  • 构造函数中的变量?

    我目前是 Java 编程的初学者 任务是 编码并测试 Hangman 游戏的一个版本 您的解决方案将涉及一个 Hangman 类 其构造函数选择一个单词 其猜测方法处理每个猜测的字符 不过 我有一个小问题 我的整个代码可以工作并编译 并且我
  • python3.5中使用aiohttp查询获取URL的参数

    async def method request here how to get query parameters param1 request rel url query name param2 request rel url query
  • Javascript:在 For 循环中创建函数

    最近 我发现自己需要创建一系列函数 这些函数使用 XML 文档中的值 并且我使用 for 循环运行适当的节点 然而 在执行此操作时 我发现数组中的所有函数仅使用过 XML 表的最后一个节点 对应于 for 循环的最后一次运行 以下是展示这一
  • 如何确定 CSV 文件字段是制表符分隔还是逗号分隔?

    我试图确定 CSV 文件字段是制表符分隔还是逗号分隔 我需要 PHP 验证 我怎样才能确定这一点 现在回答这个问题已经太晚了 但希望它能对某人有所帮助 这是一个简单的函数 它将返回文件的分隔符 function getFileDelimit
  • JSON 响应周围的注释块

    我注意到一些 Web 应用程序返回 AJAX 响应 并在注释块中嵌入 JSON 数据 例如 这是一个示例响应 firstName John lastName Smith address streetAddress 21 2nd Street
  • 服务器端 Google 标记聚类 - Python/Django

    在尝试使用客户端方法来聚类大量 Google 标记后 我认为这对于我的项目 拥有 28 000 多名用户的社交网络 来说是不可能的 是否有在服务器端对坐标进行聚类的示例 最好是在 Python Django 中 我希望它的工作方式是根据标记
  • 类似 wget 的 BitTorrent 客户端或库? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 是否有任何
  • CPU是如何做减法的?

    我有一些基本的疑问 但每次我坐下来尝试面试问题时 这些问题和我的疑问就会出现 假设 A 5 B 2 假设A和B都是4字节 那么CPU是怎么做的呢 A B添加 我知道 A 的符号位 MSB 为 0 表示正值 B 的符号位为 1 表示负整数 现
  • 创建超过 2 组的高图表密度

    我尝试用两个以上的组创建高图表密度 我找到了一种手动将它们逐一添加的方法 但必须有更好的方法来处理组 示例 我想创建一个类似于下面的ggplot图表的highchart 而不需要将它们一一添加 有什么办法可以做到吗 d f lt data
  • 无法使用 Android 版 VLC 设置字幕

    启动 Android 版 VLC 的 VideoPlayerActivity 时 我在设置字幕位置时遇到问题 我的目标是 API 27 并使用 FileProvider 来允许访问文件 根据文档here https wiki videola
  • 从多页表单中获取活动控件名称和值

    我已经在网上寻找解决方案几个月了 但没有成功 我创建于Excel 2010 a UserForm与多页 我正在尝试编写一个函数来获取activecontrol名称和值 到目前为止 我已经成功使用此命令获取了控件的名称Me MultiPage
  • pyPDF通过django合并并显示为httpresponse

    我在合并 pyPDF 逻辑以将两个 pdf 文件合并到我的 django 站点时遇到问题 我编写了在本地服务器上的 python 文件中运行时用于合并文件的代码 但我需要明确识别要合并的文件 from pyPdf import PdfFil
  • 如何通过VBA刷新所有单元格

    有没有办法触发 从VBA Excel要求它重新评估所有Excel单元格 谢谢 The 计算 http msdn microsoft com en us library aa223802 28office 11 29 aspx方法可以重新计算
  • 最初从位图泄漏未引用的 byte[] 但被回收()导致内存泄漏(直到活动停止)

    我有位图内存泄漏导致内存不足 我在 Android 5 0 三星 S5 上运行了测试 我已经使用 Android Studio 1 5 1 2 0 0 Preview 7 调查了这个问题 HPROF 内存转储显示有多个 byte 与我暂时使