位图、Bitmap.recycle()、弱引用和垃圾回收

2023-11-30

据我所知,在 Android 上,建议将 Bitmap 对象作为 WeakReferences 引用,以避免内存泄漏。当位图对象不再保留硬引用时,垃圾收集器将自动收集它。

现在,如果我理解正确的话,必须始终调用 Bitmap.recycle() 方法来释放位图。我认为这是因为 Bitmap 对象有特殊的内存管理。

那是对的吗?

如果这是真的,那么当使用WeakReferences时,一定会出现内存泄漏,因为当WeakReferences被释放时,Bitmap.recycle()永远不会被调用。或者,以某种方式,WeakReferences 是否足以避免内存泄漏?

Thanks


Bitmap.recycle isn't required被调用,因为垃圾收集器最终会自行清理位图(只要没有引用)。 Android 中的位图是在本机内存中创建的,而不是在 VM 堆上创建的,因此 VM 堆上的实际位图对象非常小,因为它不包含任何实际的位图数据。(编辑:从 Android 3.0+ 开始不再是这种情况)位图的实际大小仍将计入您的堆使用量,以便进行 GC 并确保您的应用程序不会使用太多内存。

然而,当谈到位图时,GC 似乎有点喜怒无常。如果您只是删除所有硬引用,有时(在我的情况下)它会在位图上挂起一段时间,这可能是因为位图对象的分配/计数方式很奇怪。 Bitmap.recycle 似乎有利于让 GC 更快地收集该对象。

无论如何,你都不会leak记忆如果你不打电话Bitmap.recycle只要您不意外保留硬引用即可。你可能会遇到OutOfMemoryErrors如果您尝试一次分配太多位图或太大的位图而不调用recycle, 尽管。

编辑:值得注意的是,从 Android 3.0 开始,位图不再分配在本机内存中。它们像任何其他 Java 对象一样分配在 VM 堆上。不过,我所说的不需要调用回收仍然适用。

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

位图、Bitmap.recycle()、弱引用和垃圾回收 的相关文章

  • Android 应用程序安装失败:包 com.my.app 在条目 AndroidManifest.xml 处没有证书

    在 Android Studio 中 我生成了带有密钥库等的签名 APK 将 APK 安装到设备上时失败 并显示 无法安装应用程序 并且在 Android Monitor 中我看到以下行 Package com my app has no
  • 如何从Firebase Firestore实时更新文档中获取修改后的字段或数据? [复制]

    这个问题在这里已经有答案了 我有多个文档 我的问题是我无法获取修改的特定数据 我正在获取完整的文档 db collection employees whereEqualTo OID OID addSnapshotListener new E
  • Android 图表[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个项目 其中有一些图表 图形 刻度图 烛台图和范围图 但问题是 没有该图表的库 我有烛台图的
  • Fragment 问题中的 ExpandableListView

    我正在尝试在片段中实现可扩展列表视图 没有错误出现 当我尝试记录两个的输出时List
  • 华为手机“受保护的应用程序”设置及处理方法

    我有一台搭载 Android 5 0 的华为 P8 用于测试应用程序 该应用程序需要在后台运行 因为它跟踪 BLE 区域 我发现华为内置了一个名为 受保护的应用程序 的 功能 可以从手机设置 电池管理器 gt 受保护的应用程序 访问该功能
  • 需要 Android webview window.open() 和 window.close() 的信息

    我正在开发一个安卓应用程序 这是我网站的 WebView 该网站包含一个弹出按钮 单击该按钮后 将打开一个新窗口并显示内容 该链接可以来自外部站点 然而 当我实现此操作时 新选项卡正在打开 之后它会弹出以打开浏览器 尽管在 Web 视图中打
  • HMS 核心地图套件在我的 Android 应用程序上根本无法工作

    我正在尝试在我的应用程序中使用华为 HMS 地图套件 我对整体地图很陌生 无论是来自谷歌还是华为 我按照文档中的教程以及华为提供的代码实验室中的说明进行操作 并将我的代码在一起 但是当我运行地图活动时 什么也没有出现 我得到的只是一个空白活
  • 透明 9patch 图像:显示出线条

    我得到了一个透明的 9 补丁图像 其中有 9 条补丁线显示槽 This is the output 显然我不希望水平线可见 这就是我创建 9patch 的方式 This is the final image that is used in
  • 控制 OverlayItem 大小

    我正在构建一个在单个 ItemizedOverlay 中包含几十个 OverlayItems 的地图 我的地图设计为可以非常近距离地查看 大约缩放级别 18 并且 OverlayItems 彼此非常接近 地图放大时看起来不错 但是 如果用户
  • 是否可以通过 Android 应用程序来录音?

    我是一名开发人员 希望创建一个 Android 应用程序来记录电话 这是出于我个人的需要 为了我自己的目的和记录而记录电话 是否有可能做到这一点 是否可以访问麦克风以及通过扬声器发出的声音 我对 Android 开发有点陌生 所以请耐心等待
  • Android 中的 OpenGL 缩小

    我正在使用 3D 对象并渲染它并通过扩展 GLSurfaceView 实现渲染器来显示它 问题是如何通过捏合和捏合进行缩小 下面是我的班级 package com example objLoader import java nio Byte
  • 在运行时更改用作背景的 Drawable xml 内的形状纯色

    我有一个 Drawable xml 文件 background xml
  • 离子初始加载时间

    我正在使用 Ionic 构建一个简单的应用程序 但我的应用程序在冷启动时的初始加载时间方面存在性能问题 这是我所做的 collection repeat 代替带有 track by 的 ng repeat 原生滚动 overflow scr
  • 如何更改操作栏背景和文本颜色

    我正在使用本教程中的导航抽屉 http www androidhive info 2013 11 android sliding menu using navigation drawer http www androidhive info
  • 丢失应用程序的密钥库文件(但已启用 Google Play 应用程序签名)

    我已经失去了原来的keystore用于签署我的应用程序的文件 我的应用启用了 Google Play 应用签名 如果我联系 Google 支持人员 是否可以重置密钥 以便我可以继续上传到此包 我希望我可以做到这一点 因为应用程序签名已启用
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从
  • Android MulticastSocket.joinGroup 不会触发发送 IGMP 消息

    Code MulticastSocket s new MulticastSocket InetAddress addr InetAddress getByName 230 230 230 1 s joinGroup addr 在 Ubunt
  • 从文件路径显示图像视图?

    我需要仅使用文件名而不是资源 ID 来显示图像 ImageView imgView new ImageView this imgView setBackgroundResource R drawable img1 我在可绘制文件夹中有图像
  • LifeCycleAware Fragment 中的片段生命周期事件

    我有一个生命周期感知片段和一个LifecycleObserver class public class MyFragment extends Fragment Override public void onCreate Nullable B
  • 如何访问我的 Android 程序中的联系人

    我正在制作一个短信应用程序 并且想要访问我的 Android 应用程序中的联系人 我想访问联系人 就像他们在实际联系人列表中一样 选择后 我需要返回到我的活动 在其中我可以向该人发送短信 或者是否可以访问存储联系人的数据库 我的代码如下所示

随机推荐

  • 取消嵌套包含列表的数据框

    我有一个包含列表的数据框 如下所示 Load packages library dplyr Create data frame df lt structure list ID 1 3 A structure list c 9 8 c 7 6
  • R 中 Data.Table 中的一对多左连接/合并

    如果您在其他地方知道这个问题的答案 请告诉我 但我搜索并阅读了大量与 data table 相关的联接主题以及包的介绍和常见问题解答 但仍然没有找到答案 本质上 我正在寻找类似灵活的左 连接之类的东西 我本以为直接设置 A B 的键就可以解
  • 将 Firebase Admin SDK 添加到 Unity 项目

    我是 Unity 和 C 的新手 对 C 和所有 NET 东西来说真是菜鸟 我想在我的 Unity 项目中使用 Firebase 实时数据库 我按照以下说明进行操作Firebase 文档进行设置 但在我创建了一个新的 p12 文件并添加后这
  • 使用 Pandas 将列转换为行

    所以我的数据集包含 n 个日期的一些位置信息 问题是每个日期实际上是不同的列标题 例如 CSV 看起来像 location name Jan 2010 Feb 2010 March 2010 A test 12 20 30 B foo 18
  • 私有成员函数,它采用指向同一类中私有成员的指针

    我怎样才能做到这一点 以下代码不起作用 但我希望它能解释这个想法 class MyClass private int ToBeCalled int a char b typedef MyClass FuncSig int a char b
  • Android中EditText的InputType

    我想要以下内容 应首先显示数字键盘 但应该可以更改为文本键盘并输入一些字母 我问了几乎同样的问题并接受了答案 Android中EditText的InputType 但现在我发现一些奇怪的行为 设置输入类型 to Number 可以将键盘更改
  • 设置axes.linewidth而不更改rcParams全局字典

    因此 似乎无法执行以下操作 它会引发错误 因为axes没有set linewidth方法 axes style linewidth 5 axes rect 0 1 0 1 0 9 0 9 axes axes rect axes style
  • 如何使用 Dapper 执行插入和返回插入的身份?

    如何使用 Dapper 执行数据库插入并返回插入的身份 我尝试过这样的事情 string sql DECLARE ID int INSERT INTO MyTable Stuff VALUES Stuff SELECT ID SCOPE I
  • .Net 如何允许可空值设置为 Null

    The Nullable
  • 将字典附加到字典[重复]

    这个问题在这里已经有答案了 我有两本现有词典 我希望将其中一本 附加 到另一本 我的意思是 另一个字典的键 值应该放入第一个字典中 例如 orig A 1 B 2 C 3 extra D 4 E 5 dest Something here
  • “Vary: Accept”HTTP 标头的作用是什么?

    我使用 PHP 生成动态网页 正如以下教程中所述 请参阅下面的链接 当 SERVER HTTP ACCEPT 允许时 XHTML 文档的 MIME 类型应为 application xhtml xml 由于您可以使用 2 个不同的 MIME
  • Java按引用传递问题[重复]

    这个问题在这里已经有答案了 可能的重复 Java是按引用传递吗 我这里有这门课 public class Cat private String catNum private static Cat cat1 private static Ca
  • 使用 SAX 解析器解析自关闭 XML 标签时遇到问题

    我在使用 SAX 解析自关闭 XML 标签时遇到问题 我正在尝试从 Google Base API 中提取链接标签 我在解析常规标签方面取得了一定的成功 这是 xml 的一个片段
  • 如何通过连接和基于行的限制(分页)在休眠中获得不同的结果?

    我正在尝试使用基于行的限制来实现分页 例如 setFirstResult 5 and setMaxResults 10 在具有与其他表的联接的 Hibernate Criteria 查询上 可以理解的是 数据被随机切断 并解释了原因here
  • 如何让div居中?

    我在 HTML 中居中 div 时遇到问题 垂直和水平 我的代码看起来像这样 div SOME HTML div container width 366px height 274px margin 50 top 137px left 188
  • hive 中的 regexp_extract 给出错误

    我的表中有一些数据 例如 id params 123 utm content doit utm source direct 234 utm content polo utm source AndroidNew 使用 regexp extra
  • Visual Studio 新项目“确定”按钮呈灰色

    我认为这只是意味着我缺少依赖项 但我无法创建任何类型的项目 控制台应用程序 Web 应用程序 Windows 窗体等 我运行的是 VS 2012 premium 您可能正在尝试将项目保存到您没有写入权限的目录位置 它可能是某处的网络驱动器
  • MATLAB - 编译 jpeg_read.c 创建 mexmaci64 文件时出错[重复]

    这个问题在这里已经有答案了 最近 我将 Matlab 项目从 Windows 操作系统转移到了 Mac 操作系统 所以我的 jpeg read mexw64 文件不再工作 我需要创建一个与 Mac OS 兼容的新 mexmaci64 文件
  • 显示应用程序端点的照片

    这是我的问题 我在一个大型 UCMA 项目上工作了 3 个月 现在我想添加一个小功能 我有很多可以动态添加 修改或删除的 ApplicationEndpoint 我希望每次创建 ApplicationEndpoint 时都指定将在 Micr
  • 位图、Bitmap.recycle()、弱引用和垃圾回收

    据我所知 在 Android 上 建议将 Bitmap 对象作为 WeakReferences 引用 以避免内存泄漏 当位图对象不再保留硬引用时 垃圾收集器将自动收集它 现在 如果我理解正确的话 必须始终调用 Bitmap recycle