android - 内存不足问题

2023-11-30

在我的应用程序中,我正在从网络下载图像。为此,我第一次从网络下载图像,这些图像存储在 SD 卡中。下次,我会检查这些图像是否在 SD 卡中。如果是,则从 SD 卡获取,否则我将从网络下载。这些图像像列表一样显示。我反复(意味着连续向上/向下移动)滚动列表,然后我的应用程序崩溃了,并且出现内存不足异常。怎么处理呢。有谁能够帮助我。

堆栈跟踪:

09-12 13:40:42.640: ERROR/AndroidRuntime(3426): java.lang.OutOfMemoryError: bitmap size exceeds VM  budget(Heap Size=7879KB, Allocated=3362KB, Bitmap Size=11402KB)
09-12 13:40:42.640: ERROR/AndroidRuntime(3426):     at  android.graphics.BitmapFactory.nativeDecodeFile(Native Method)
09-12 13:40:42.640: ERROR/AndroidRuntime(3426):     at  android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:355)
09-12 13:40:42.640: ERROR/AndroidRuntime(3426):     at  android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:433)
09-12 13:40:42.640: ERROR/AndroidRuntime(3426):     at  com.ibkr.elgifto.GiftCategories$itemlistadapter$4.getDrawableFromUrl(GiftCategories.java:830)
09-12 13:40:42.640: ERROR/AndroidRuntime(3426):     at  com.ibkr.elgifto.GiftCategories$itemlistadapter$4.run(GiftCategories.java:739)
09-12 13:53:32.450: INFO/WSP(332): [Receiver] next auto-sync alarm event is 180 mins later, at time: Mon Sep 12 16:53:32 GMT+05:30 2011

code

private Drawable getDrawableFromUrl(String imageUrl) {

    // TODO Auto-generated method stub
    String filename = imageUrl;
    filename = filename.replace("/", "+");
    filename = filename.replace(":", "+");
    filename = filename.replace("~", "s");
    File elgiftoimagesref = new File("/sdcard/Elgiftoimages/");

    elgiftoimagesref.mkdir();

    final File file = new File(elgiftoimagesref, filename);
    BitmapDrawable SDdrawable = null;

    boolean exists = file.exists();
    if (!exists) {
        try {
            URL myFileUrl = new URL(imageUrl);
            HttpURLConnection conn = (HttpURLConnection) myFileUrl
                    .openConnection();
            conn.setDoInput(true);
            conn.connect();
            InputStream is = conn.getInputStream();
            final Bitmap result = BitmapFactory.decodeStream(is);
            is.close();
            new Thread() {
                public void run() {
                    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                    if (result != null) {
                        result.compress(Bitmap.CompressFormat.JPEG, 40,
                                bytes);
                    }
                    try {

                        FileOutputStream fo;
                        fo = new FileOutputStream(file);
                        fo.write(bytes.toByteArray());

                        fo.flush();
                        fo.close();
                        // result.recycle();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }.start();
            BitmapDrawable returnResult = new BitmapDrawable(result);
            return returnResult;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    } else {

        // Here i am getting the out of memory error.
        SDdrawable = new BitmapDrawable(BitmapFactory.decodeFile(file
                .toString()));
        return SDdrawable;
    }
}       

我认为你没有使用ViewHolder模型对于列表视图。在这种情况下,您应该会收到这样的错误,因为所有列表项都将在内存中可用,无论其是否可见。通过使用 ViewHolder,内存将仅分配给那些可见且当前在屏幕上的项目。ViewHolder模式将性能提高150%有关 ViewHolder 的视频教程请查看this.如果你已经实现了那么就是内存泄漏的情况你可以参考一下this

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

android - 内存不足问题 的相关文章

  • 在 Android 上通话结束时启动活动

    我想在通话结束时启动一项活动 找不到任何对此的参考 我该怎么做 我还没有尝试过这个 但我假设你可以运行一些服务 始终在后台运行 它利用电话状态监听器 http developer android com reference android
  • android edittext中的字符映射

    我想让我的编辑文本就像我写字符 g 时一样 它是相关的映射自定义字符应该写成印地语中的 我认为应该有字符映射 但没有知识任何人都可以帮助我 怎么做 其他应用程序https play google com store apps details
  • 如何自定义菜单项的背景颜色?

    我正在尝试定制Toolbar的弹出菜单 现在我无法设置菜单项的背景颜色 我的 styles xml 如下所示
  • 如何获取每个StorageVolume的可用大小和总大小?

    背景 谷歌 悲伤 计划破坏存储权限 https www xda developers com android q storage access framework scoped storage 这样应用程序将无法使用标准文件 API 和文件
  • 我在布局上看不到任何 FirebaseRecyclerAdapter 项目

    我试图将数据从 Firebase 数据库检索到我的布局 但我看不到任何项目FirebaseRecyclerAdapter在布局中 请帮忙 我按照一个教程展示了如何做到这一点 当我运行应用程序时 我没有看到任何项目 但我可以滚动 public
  • 从响应中获取标头(Retrofit / OkHttp 客户端)

    我正在使用 Retrofit 与 OkHttp 客户端和 Jackson 进行 Json 序列化 并希望获取响应的标头 我知道我可以扩展 OkClient 并拦截它 但这发生在反序列化过程开始之前 我基本上需要的是获取标头以及反序列化的 J
  • Android Q:file.mkdirs() 返回 false

    我们有一个应用程序 使用外部存储来存储一些临时文件 图像 二进制数据 该代码已经运行了几年 直到最近才发生重大变化 在 Android Q 上它不起作用 File f new File Environment getExternalStor
  • 如何使用 Google Maps for Android V2 处理地图移动结束?

    我想在地图中心更改后立即对地址进行地理编码 如何使用新的 Android 版 Google 地图 V2 处理地图移动 我说的是用户用手指拖动地图的情况 查看新的地图 API Override public void onMapReady G
  • 将现有 VARCHAR 列与 Room 结合使用

    我正在尝试将现有的数据库与 Android Room 一起使用 但是 我的一个表有一个 VARCHAR 列 Room 似乎只支持 TEXT 不支持 VARCHAR 而且 sqlite 不允许修改列类型 那么 有没有办法使用Room中现有的带
  • Android WebView里面的ScrollView只滚动scrollview

    在我的应用程序中 我有一个 ScrollView 其中包含一些线性视图 一些文本视图和一个 Webview 然后是其他线性布局等 问题是 WebView 不滚动 Scroll 仅侦听 ScrollView 有什么建议么
  • 如何在我现有的 Android 应用程序中使用 Telegram API(包括聊天应用程序)?

    我想使用 telegram API 在我现有的 Android 应用程序中开发聊天功能 我不知道如何实施 我认为 看看Telegram 数据库库 测试版 从这里TDLib https core telegram org tdlib 俄语 但
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • 当它的父级是 ConstraintLayout 时设计 CardView 吗?

    我在编辑包含Relativelayout的Cardview内的RelativeLayout时搞砸了 ConstraintLayout会将相对布局的wrap content更改为0并添加工具 layout editor absoluteX 1
  • Android Studio 与本地网络共享上的项目文件

    这是我的设置 Android Studio 项目文件位于 Ubuntu 14 10 盒子上的共享文件夹中 尝试在 Windows 8 机器上运行 Android Studio 1 0 2 并将 U 驱动器映射到包含项目文件的 Ubuntu
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • 我应该释放或重置 MediaPlayer 吗?

    我有自己的自定义适配器类 称为 WordAdapter 并且我正在使用媒体播放器 名为pronounce WordAdapter 类中的全局变量 我有不同的活动 其中每个列表项都有线性布局 名为linearLayout 我正在设置onCli
  • OnLongClickListener 不工作

    我有一个ImageView 我需要使用onLongClickListener对于图像视图 当我使用这段代码时 什么也没有发生 Code gallery Gallery findViewById R id gall1 gallery setA
  • 插件“Android Bundle Support”不兼容

    大家好 自从上次更新以来 当我启动 android studio 时 我遇到了一个非常奇怪的错误 我有这个错误 插件错误 插件 Android Bundle Support 不兼容 直到构建 AI 195 SNAPSHOT 我在网上找不到任

随机推荐

  • 使用刷新令牌 adal js 获取新的访问令牌

    我正在使用在天蓝色广告中进行身份验证的应用程序 我使用 adal js 获取访问令牌 但访问令牌的有效期仅为 1 小时 那么如何使用 Adal js 中的刷新令牌在幕后获取新令牌呢 如果您能提供示例代码 我们将不胜感激 只要用户与 Azur
  • JMeter无法使用插件打开JMeter文件

    当我尝试打开保存的 jmx 时出现错误 我的备份已经一周了 我尝试遵循类似的问题 但也无法使用 JMeter 3 1 加载它 我安装了新的 JMeter 3 2 并安装了所有可用插件的插件 但仍然收到错误 2017 08 30 10 03
  • 使用 NSNotificationCenter 向另一个类发送通知

    所以我的目标是使用以下命令向另一个班级发送通知NSNotificationCenter 我也想通过object并通知对方class 我该怎么做 您必须先注册一个通知名称 NSNotificationCenter defaultCenter
  • C 语言翻译的 8 个阶段的海报

    有没有人参考过海报 单页 pdf 或类似的内容 其中包含 C 语言翻译的八个阶段的列表 第一个阶段是三字母翻译 我想打印一张挂在电脑旁边的墙上 更新 抱歉忘记指定 我对 C90 感兴趣 虽然 C99 可能非常接近 Pragma正如 PMG
  • R:如何在 ggplotly 中自定义桑基图?

    我有按年份和型号划分的销售数据 可以通过以下方式可视化桑基图 现在我正在努力处理两个问题 首先我需要设置模型B多年来 无论其价值如何 总是处于闲聊的底部 当我通过重新可视化 ggplot 时ggplotly hover不显示销售额或年份 c
  • Jenkins 管道 ansicolor 控制台输出

    我知道可以使用 AnsiColor 插件在控制台输出中显示颜色 我测试了下面的基本示例 This shows a simple build wrapper example using the AnsiColor plugin node Th
  • Python 迭代器没有ext() 吗?

    Python 迭代器有吗hasnext method 捕捉的替代方案StopIteration是使用next iterator default value 例如 gt gt gt a iter hi gt gt gt print next
  • Android:如何写入SQL数据库

    我一直在尝试遵循 newBoston 教程 但当我单击按钮将数据写入数据库时 发现出现运行时错误 LogCat 显示 在活动中找不到方法 addModuleButton View 有什么建议么 添加模块活动 public class Add
  • 从另一个线程填充列表视图

    我试图从另一个类填充列表视图 但出现此错误 跨线程操作无效 控制 listView1 是从创建它的线程以外的线程访问的 在我的课堂上 我像这样声明我的列表视图 class CheckBlankPages public String pdfF
  • 使用#pragma warning push/pop 是暂时改变警告级别的正确方法吗?

    有时很难编写完全不发出警告的 C 代码 然而 启用警告是一个好主意 因此 通常有必要禁用某些特定构造的警告 并在所有其他代码片段中启用它们 到目前为止我已经看到了两种方法 第一个是使用 pragma warning push and pra
  • “main”函数的返回值去了哪里?

    在C语言中 一个函数always将其值返回给调用函数 而不是返回给其自身 如果返回类型不为 void Like int main 但是由于 main 函数是由操作系统调用 即不是一个函数 那么 main 函数返回值给谁呢 当使用表达式返回值
  • 在给定字符串中搜索字符集的最快算法

    这是我和我的一位朋友进行的一场辩论 制作一种验证方法来检查给定字符串是否具有不允许的字符之一的最快方法是什么 方法一 简单 char invalidChars toCharArray for int i 0 i lt myString le
  • 在 pandas 中按组填充缺失的日期

    我需要按组填写缺失的日期 这是创建数据框的代码 我只想将填充列的日期向下添加到填充列的日期更改时 并且仅直到组 名称 更改为止 data tdate 20080815 20080915 20081226 20090110 20090131
  • PHP无法通过python连接mysql

    我正在编写一个 PHP 来执行一个像这样连接到 mysql 的 python 脚本 在Python脚本中 coding utf 8 import mysql connector 并得到这个错误 回溯 最近一次调用最后一次 导入中的文件 do
  • 显示单元格的公式,但显示值而不是引用

    我正在使用公式在另一个单元格中显示单元格公式 我想显示这个公式中每个参考的值 而不是参考 Ex R 16 R19 T 15 R 16 想要它成为 3 2 4 2 我现在使用的函数来显示公式 Function GetFormula Cell
  • 聚合物select2元件

    我正在尝试包装很棒的 select2 jquery 小部件 https github com ivaynberg select2 在聚合物元素中以便于重复使用 我能够正确初始化选择 但在初始化后遇到问题 具体来说 当单击选择将其打开时 在定
  • 使用 gmaps4rails 显示多边形

    红宝石新手在这里 尝试使用 gmaps4rails gem 顺便说一句 很棒的 gem 在谷歌地图上将点列表显示为多边形 任何基于下面的代码示例的建议将不胜感激 我可以看到地图的轮廓 但看不到地图 也没有多边形 更新 此代码已更新 问题已解
  • 如何阻止 VS Code 在按 Enter 键时自动选择第一个建议?

    每当我在 flutter 代码中输入 Widget 函数并按 Enter 键时 VS Code 都会自动选择第一个参数建议 当我实际上想要在下一行输入该参数时 该参数会在同一行上输入 有没有办法在顶部添加一个空建议 以便我必须先按向下箭头才
  • 我需要 ($("#flip").click slipToggle ) 在同一页面上使用相同的

    我有一个使用 XSl 代码从 XML 读取的常见问题解答页面 问题和答案的 div 将重复与 XML 中的记录数一样多 这是 XSL 代码
  • android - 内存不足问题

    在我的应用程序中 我正在从网络下载图像 为此 我第一次从网络下载图像 这些图像存储在 SD 卡中 下次 我会检查这些图像是否在 SD 卡中 如果是 则从 SD 卡获取 否则我将从网络下载 这些图像像列表一样显示 我反复 意味着连续向上 向下