当前位置: 首页 > 知识库问答 >
问题:

Android内存泄漏位图

师承弼
2023-03-14

我在继续我的游戏超过8次后,我得到了OutOfMemory错误,因为堆逐渐填充。在使用MAT分析我的游戏堆时,我知道以下2个原因:

关键词Android.Graphics.Bitmap Byte[]

关键词java.lang.Object[]Android.content.res.resources

请提出解决方案

共有2个答案

翟沈义
2023-03-14

对于游戏中大量使用位图(如imageButtons等),请确保您的活动不会保持活跃。

>

  • 您可以在onpause/onresume中对每个大项目使用setImageDrawable(null)进行加载/卸载游戏。然后,您必须在每个简历的视图中设置drawables。如果你不做#3,这是很好的。

    使用片段是可能的,这解决了这样一个问题,即当您销毁视图时,它们会卸载视图。

    如果必须有活动,可以在startActivity(myIntent)之后使用finish()。在这种情况下,您很可能需要重写backbutton来控制导航,因为您留下的activity不再在后面堆栈上。

    至于资源本身,您将阅读大量关于drawable-nodpi的内容,但如果您混合了编程布局和xml布局调整,您将希望确保在所有drawable-?dpi文件夹中都有资源,这对ImageButtons有很大的不同。

    另外,不要在代码中使用setmaxheight,使用layoutparams Height。这在ImageButtons上不止一次扼杀了我的记忆。

    如果您在代码中将pngs加载到视图中,请使用Glide或Picasso,这样您就可以免受伤害了:)

  • 方焱
    2023-03-14

    尝试回收映像,例如:

    if(image!= null) {
        ((BitmapDrawable)image.getDrawable()).getBitmap().recycle(); //here
        image= (ImageView) view.findViewById(R.id.image);
        image.setImageResource(yourresource);
    }
    else {
        image= (ImageView) view.findViewById(R.id.image);
        imageView.setImageResource(yourresource);
    }
    
     类似资料:
    • 问题内容: 我认为我的android应用正在泄漏内存。我不是绝对确定这是问题所在。 应用程序打开时经常崩溃,并且logcat尝试加载位图图像时会显示“内存不足”异常。 崩溃后,我重新打开了该应用程序,它运行正常。Logcat会显示许多“ gc”,并且JIT表会不时地向上调整大小,而不会向下调整,直到应用程序因内存不足错误而崩溃。 这听起来像是内存泄漏吗?如果是这样,我该如何定位和关闭泄漏点。 这是

    • 我担心从泄漏金丝雀回来的信息。它显示了在UI上声明的所有变量,如片段中的材料按钮、材料卡片视图、文本视图、图像视图等,都导致了内存泄漏。我不知道为什么会这样。

    • 我正在Android应用程序中使用一些本机库,我想在某个时间点从内存中卸载它们。当装入本机库的类的类装入器被垃圾回收时,库被卸载。灵感:本土卸载。 如果ClassLoader用于加载某些类(可能导致内存泄漏),则不会收集垃圾。 本机库只能在应用程序中的一个ClassLoader中加载。如果仍然有旧的ClassLoader挂在内存中的某个地方,并且一个新的ClassLoader试图在某个时间点加载相

    • 我正在使用libgdx制作一个实时壁纸应用程序,根据时间改变资产。对于e、 g从早上6点到下午6点,我有“早上图形”,之后我有“晚上图形”,从下午6点到早上6点。 我构建资产的方式如下 我有12个AtlasRegion类型的静态数组,1个静态纹理区域变量和1个静态纹理变量。 我有两个静态函数load晨()和loadEnight()用于加载资产。 在funcions中,我加载如下 对于所有数组,如果

    • 我有一个潜在的内存泄漏在我的代码,我正在试图找到一个解决方案。我使用的是Android框架的spring。更具体的是 为了使一个即时装订。然而,当我进行内存分析时,我得到了以下结论: 由“Dalvik.System.PathClassLoader@0x43692B80”加载的1.628个“com.products.product”实例占用1.363.064(22,20%)字节。这些实例是从“jav

    • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收 我会从 java 内存泄漏的基础知识开始,并通过具体例子来说明 Android 引起内存泄漏的各种原因,以及如何利用工具来分析应用内存泄漏,最后再做总结。 篇幅有些长,大家可以分几节来看! Java