如何解决android中的OutOfMemoryError?

2024-03-25

我已经准备了可绘制动画的数量。当应用程序启动时,第一个动画将启动。我有两个按钮(下一个和上一个)具有相同的活动。当我单击下一个按钮时,我遇到了异常,例如,

 java.lang.OutOfMemoryError: bitmap size exceeds VM budget

我的代码是,

为了从drawable获取drawable动画,

private void getAnimationForLetters(int mAnim) {
        // TODO Auto-generated method stub
        String anim = "capital_anim_" + new Integer(mAnim).toString();

        final int resID = getApplicationContext().getResources().getIdentifier(
                anim, "drawable", "my-package-name");
        mImgLetter.clearAnimation();
        mImgLetter.setBackgroundResource(resID);
        mImgLetter.post(new Runnable() {

            public void run() {
                loadingAnimation = (AnimationDrawable) mImgLetter
                        .getBackground();
                loadingAnimation.start();
            }
        });

    }

我的下一个按钮代码是,

case R.id.btnNext_:
 unbindDrawables(findViewById(R.id.imgLetter));
mLetterNum=mLetterNum+1;
getAnimationForLetters(mLetterNum);

我的undind可绘制方法代码是,

private void unbindDrawables(View view) {
        if (view.getBackground() != null) {
            view.getBackground().setCallback(null);
        }
        if (view instanceof ViewGroup) {
            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                unbindDrawables(((ViewGroup) view).getChildAt(i));
            }
            ((ViewGroup) view).removeAllViews();
        }
    }

最后我得到了例外java.lang.OutOfMemoryError: bitmap size exceeds VM budget这里显示异常mImgLetter.setBackgroundResource(resID);请帮我。

我添加了以下代码来清除,

loadingAnimation.stop();
        for (int i = 0; i < loadingAnimation.getNumberOfFrames(); ++i){
            Drawable frame = loadingAnimation.getFrame(i);
            if (frame instanceof BitmapDrawable) {
                ((BitmapDrawable)frame).getBitmap().recycle();
            }
            frame.setCallback(null);
        }
        loadingAnimation.setCallback(null);

它仅适用于下一个或上一个。第一次单击下一个动画移动到第二个动画,第二次如果我单击上一个按钮,我会遇到异常,

Canvas: trying to use a recycled bitmap android.graphics.Bitmap

请帮我。


确切地说 - 系统知道何时收集垃圾,因此调用它毫无帮助。

您必须真正管理您的应用程序内存。 290x330 可能看起来不多,但如果您使用完整的 RGBA(每个像素 4 字节),您的图像就会变成 380K。如果你有几个这样的东西,你就会耗尽内存。大多数 Android 设备与 PC 不同 - 它们的内存相当有限。有些只有 16M 或 24M 来运行所有内容,包括操作系统和用户可能同时运行的任何其他应用程序。

您可以尝试包装例程以使用 try/catch 加载资源

 While( ! success ) {
   try {
       // load resources
  }  catch (OutOfMemoryError E) { 
       // do something to use less memory and try again
  }
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决android中的OutOfMemoryError? 的相关文章

  • Android EditText 和 addTextChangedListener

    我目前正在将数据库管理器移植到 Android 由于性能原因 我喜欢 仅更新已修改的属性 我尝试使用 addTextChangedListener 执行此操作 以便将修改后的条目添加到列表中 但我的程序从未输入其任何方法 EditText
  • 用于 Kotlin 中单元测试的 BuildConfigField 模拟

    我正在尝试尽可能多地涵盖Kotlin Android 库我遇到了有关自定义 BuildConfig 变量的问题 更广为人知的是buildConfigField 我想模拟这个变量来测试两者true and false values 从 Gra
  • 如何制作像 Google+ 应用程序中那样的气泡? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 有谁知道如何使用 Google An
  • 为什么不能在 Fragment 中使用 ViewPager?它实际上是

    有信息无法使用ViewPager在一个Fragment在许多来源中 例如 Android 开发者繁忙编码指南 http commonsware com 作者 Mark Murphy 或者类似的帖子this https stackoverfl
  • 如何在 Android 应用程序中隐藏 Flutterwave API 密钥

    我正在构建一个 Android 应用程序 目前正在将 Flutterwave 集成到我的应用程序中以进行支付 建议我永远不要将 Flutterwave API 密钥放在我的应用程序上 那么我该如何隐藏这些键呢 我正在使用 Retrofit
  • 蓝牙 BLE Android 以最大吞吐量写入外设

    我们公司开发了一个具有蓝牙 BLE 的硬件单元 并且我们在 Nexus 7 2013 中有一个服务应用程序 我们希望使用它向该单元发送固件文件 文件最大可达 500kb BT芯片是德州仪器CC2540 我浏览了大量的页面 并扫描了 Stac
  • 如何在Android中的DataBinding的ViewModel类中获取R.string

    我目前正在使用databinding对于我的 Android 应用程序项目 我想设置error留言在我的CustomTextView from R string txtOldPassWordError并从另一个名为的类中进行设置ViewMo
  • Play 商店中的应用描述更新

    我想更新应用程序的描述以及 Play 商店上的屏幕截图 但应用程序保持相同 即相同的版本号 我不想发布新应用程序 因为应用程序中没有任何更改 这可能吗 谷歌也会要求更新应用程序吗 您可以更新描述 也可以更改屏幕截图 您的应用程序将保持不变
  • 模拟器无法加载

    我正在使用 hello android 教程并通过 eclipse 创建 avd 启动模拟器时不使用图像 它只是显示一个黑色的后屏 中间有 ANDROID 字样 并且在 ANDROID 字样的末尾有一个闪烁的光标 我已按照 T 的步骤安装
  • Android:WebView/BaseInputConnection 中的退格键

    我在 Android 4 2 中遇到软键盘退格问题 我在 WebView CodeMirror 中有一个自定义编辑器 它使用一个空的
  • 如何在Android模拟器中隐藏应用程序图标?

    我有一个应用程序在启动完成后自动启动 但应用程序图标显示在android模拟器中 现在我想向用户隐藏该图标 这样用户就无法知道应用程序已启动 并且他们无法启动该应用程序手动申请 在您的 AndroidManifest xml 文件中 您可能
  • Android - 状态栏阻止全屏

    我的应用程序启动时可以全屏正确运行 然而 在最小化然后返回应用程序后 状态栏会弹出 并将我的视图向下推一点 如何防止状态栏移动我的视图 这是我的布局
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • Android 的 Intent 和 Parcelable 对象

    为什么我需要打包我的对象 即使我只需将其发送到同一任务的另一个线程 实际上 我需要打开一个甚至可以在同一线程 主线程 上运行的活动 换句话说 为什么 Google 不提供一个 startActivity 版本 它采用通用对象广告参数而不是捆
  • Expresso 的 Android 测试首选项片段

    我在通过 Expresso 测试我的代码时遇到问题 我写了这段代码 public class SettingsActivity extends Activity Override protected void onCreate Bundle
  • TextView.setMaxLines 不起作用?

    在我的应用程序中 我有一个屏幕 其中显示一些文本 然后显示一张照片 文本的长度是可变的 有时根本没有 有时很多 所以我想对其进行设置 以便文本永远不会占用超过几行 但可以滚动 为下面的图像留下足够的空间 我这部分的视图组件是以编程方式创建的
  • 使 Recyclerview 固定高度并可滚动

    已解决以下检查答案 所以我试图为我的 Android 应用程序创建评论功能 我想在 recyclerview 中显示评论 然后在 recyclerview 下方有一个按钮和文本视图来添加评论 我想让 recyclerview 具有一定的高度
  • Android:透明活动问题

    最近 在我们的一款生产应用程序上 透明活动已停止工作 我的意思是它变成了黑色背景而不是透明背景 当我将活动的背景颜色设置为纯色 即红色 绿色等 时 它的应用不会出现问题 该问题可能是由于迁移到 AndroidX 引起的 但我没有这方面的证据
  • 在数组列表中过滤 Filterable 不取消之前的过滤

    我看过过滤器方法文档 其中显示调用过滤器会取消所有先前未执行的过滤请求 并发布一个稍后将执行的新过滤请求 但我收到的实际回调有些不同 在我的实现中 它不会取消先前的过滤器请求并调用publishResults 最近一次搜索条件后的上一次搜索
  • Android 的代码覆盖率[重复]

    这个问题在这里已经有答案了 可能的重复 Android测试代码覆盖率 Eclipse https stackoverflow com questions 3282702 android test code coverage eclipse

随机推荐

  • COCOA 中的 PDF 到 JPG 转换

    在我的 cocoa 应用程序中 我需要将 pdf 的每一页保存为 jpg 我如何继续使用 Objective C Using pure Objective C Cocoa and PDF Kit http developer apple c
  • jQuery:如何全局获取整个文档正文中我悬停的最里面的 dom 元素?

    我想检测鼠标在整个文档主体上的移动 并能够准确地判断我将鼠标悬停在 DOM 的哪一部分上 我所说的 哪一部分 是指鼠标当前位于最里面的 DOM 元素 我可以将悬停绑定到整个文档正文 但是 this 会给我 body 而不是最里面的元素 或者
  • Python,美汤,获取所有类名

    给定一个 html 代码可以说 div class class1 span class class2 some text span span class class3 some text span span class class4 som
  • 警告使用函数指针的结构内部的匿名命名空间

    在我的程序中 Put this code in a separate header file struct S1 typedef struct int unused RETVAL typedef RETVAL MyFunc void res
  • 检查文件是否存在而不创建它

    如果我这样做 File f new File c text txt if f exists System out println File exists else System out println File not found 然后文件
  • python:更改符号变量并分配数值

    为了计算导数和其他表达式 我使用了 sympy 包并表示T sy Symbol T 现在我已经计算出正确的表达式 E T 2 F deriv T T rho where def F deriv rho T rho ret 0 for n i
  • 如何将VueJS中的属性对象传递给组件来修改它?

    将 VueJS 中的属性对象传递给组件并在那里修改它的最佳实践是什么 例如 人员表 姓名 名字 年龄 性别等 单击某个条目后 会弹出一个对话框 您可以在其中修改该条目 如果我通过 props 将条目传递给组件并修改它 我会收到 错误消息 避
  • D3.js:饼图,仅向外部区域添加边框

    我在 D3 中得到了一个饼图 并用笔画分隔了每个切片 但是 我想仅向切片的外部区域添加边框 而不是在连续线上添加边框 而是尊重原始切片中的笔划创建的间隙 请参阅我的图片以进行澄清 关于如何做到这一点有什么想法吗 See http jsfid
  • npm更新成功,但仍然显示旧版本

    当我做一个npm v我发现我仍然使用 5 6 0 并不断收到执行操作的提示npm i npm 但我已经做了一个sudo npm install npm latest g并用 a 进行双重检查npm outdated g depth 0看到我
  • MySQL命名约定,字段名应该包含表名吗?

    有朋友告诉我 我应该在同一个表的字段名中包含表名 我想知道为什么 而且应该是这样吗 例子 Table Users Fields user id username password last login time 我发现前缀 user 毫无意
  • “范围的坐标或尺寸无效”

    我正在开发一个与 REST API 链接并将数据放入 Google 表格的 Google Apps 脚本 我已经成功完成一次此操作 但是在访问一些不同的数据时 我收到错误消息 范围的坐标或尺寸无效 当它们在我的其他脚本上完美运行时 访问的所
  • 假设不变的 ASCII 编码,用 Rubyist 方法解码该编码字符串

    我的程序是二进制协议的解码器 该二进制协议中的字段之一是编码的String 中的每个角色String是可打印的 并且代表一个整数值 根据我正在解码的协议的规范 它表示的整数值取自下表 其中列出了所有可能的字符 Character Value
  • 依赖项的 Maven 项目变量

    我有一个加载小程序的 html 文件 html需要通过名称引用jar 并且由于maven根据artifactid 版本等对其进行命名 因此html需要随着项目的发展动态更新 似乎资源过滤是可行的方法 但我无法弄清楚要插入的变量应该是什么样子
  • jQuery 动画小数递增/递减

    我想一步一步地动画两个十进制数之间的差异 已经发现乔斯 克劳克罗夫特的解决方案 http www josscrowcroft com 2011 code jquery animate increment decrement numeric
  • 数据类中的属性

    描述 我正在尝试实现一个仅包含几个参数的简单数据类 dataclass class ReconstructionParameters img size int CR int denoise bool epochs int learning
  • 如何以可跨 Linux、Windows 和 MacOS 移植的方式收集 Python 3 中的当前架构?

    我正在尝试找到一种可移植的方式来收集当前的架构 例如x86 64 or AArch64 我将用它来填充一个标志 例如is x86 使用Python 3 它看起来像import platform platform machine 函数是正确的
  • 获取 CPU、RAM 和 GPU 信息 - UWP 应用

    是否可以在 UWP 应用程序中获取计算机的 CPU GPU 和 RAM 信息 E 在文本块中显示此信息 我想知道处理器型号 例如 Intel Core i7 xxxx 和总 RAM 我想知道处理器型号 例如 Intel Core i7 xx
  • 启发式参与者永无休止的定期恢复

    几天来我们的日志里一直充斥着这样的消息 2018 06 15 12 19 23 WARN com arjuna ats arjuna Periodic Recovery Transaction 0 ffff0a983f1e 1f3aa2ff
  • IE10 上的 WebSocket 出现 SecurityError

    我目前正在 IE10 在 Windows 8 上 下开发一个网站 使用 JavaScript 中的 WebSockets 它在 Firefox 18 和 Chrome 25 下运行良好 但在 IE10 上建立连接时出现 SecurityEr
  • 如何解决android中的OutOfMemoryError?

    我已经准备了可绘制动画的数量 当应用程序启动时 第一个动画将启动 我有两个按钮 下一个和上一个 具有相同的活动 当我单击下一个按钮时 我遇到了异常 例如 java lang OutOfMemoryError bitmap size exce