20-2-4 安卓软件中加载较大图片导致crash(Failed to allocate a xxx byte allocation with xxxfree bytes)的问题

在调用图片加载到imageview时,有一张图片点击后闪退,猜测是图片大小问题,

通过查询安卓程序员开发手册,在

https://developer.android.com/topic/performance/graphics/load-bitmap.html?hl=zh_cn#java中找到了相应的解决方案——即不通过设置

android:largeHeap="true"

来让设备成功显示过大的图片。

分三步走:

(1)计算原图片从原像素到我所需的最高像素所要缩小的倍数

(2)利用option进行解码,先不分配内存(options.inJustDecodeBounds = true),只获取它的像素值,然后进行缩小

(3)分配内存,将缩小的倍数加入option,进行载入

思路如此,源代码在上面的网页中可以找到,希望我的思路可以提供一些帮助

原文地址:https://www.cnblogs.com/graphiteliang/p/12259124.html

时间: 2024-08-27 22:29:17

20-2-4 安卓软件中加载较大图片导致crash(Failed to allocate a xxx byte allocation with xxxfree bytes)的问题的相关文章

android客户端加载网络大图片如何避免内存溢出

在Android开发中加载sdcard上的大图片到内存时容易导致OOM异常,常见的解决办法是基于BitmapFactory.Options类提供的方法定义指定的解码方式,设置inJustDecodeBounds属性为true,避免分配内存,返回一个null的Bitmap对象(包含outWidth,outHeightandoutMimeType),然后读取图片的尺寸和类型.再根据屏幕的高和宽对图片进行缩放,最后将缩放的图片加载到内存,主要代码如下: 1 Options opts = new Opt

关于SDWebImage加载高清图片导致app崩溃的问题

链接是对于SDWebImage的使用方法 http://www.cnblogs.com/JimmyBright/p/4457258.html 使用SDWebImage加载高清图片的时候,往往会报内存溢出的错误导致程序直接crash.比如说,你的程序加载10张左右的单反相片,这些相片每张都在10M左右,使用SDWebImage下载缓存再显示的方法,程序肯定会直接挂掉,查看内存图标一般是这种情况 这个程序一般运行内存消耗是13M左右,但是在加载了某张10M左右的图片后,突然有一个上升,飙升到178M

AS中加载gradle时出现Gradle sync failed: Could not find com.android.tools.build:gradle.的错误

时间:2019/12/7 这次接着整理加载gradle时出现的错误 出现的错误: 1 Gradle sync failed: Could not find com.android.tools.build:gradle:3.5.0. 2 Searched in the following locations: 3 file:/F:/studio/studio2.0/gradle/m2repository/com/android/tools/build/gradle/2.8/gradle-2.8.p

ListView中加载大量的图片

情况是这样的:我需要把大约四五十个车标在一个listView中展示出来,一般在用ListView的时候撑死十来个图标,按不同分类使用,这倒好办,在创建view的时候使用R.drawable.xxx指定就行了.但我这是四五十个,要是一个个的指定我自己都得承认自己是SB.不过还好折腾了一天终于把这个问题解决了.不过有一个条件要满足: 所有的图标都放在drawable中,并且命名为logo_xxxx.png.不是png,是jpeg或者其它的都行. Field[] drawableFields = R.

(android开源库android-gif-drawable)第二篇 加载网络gif图片

大家好,  今天给大家带来如何使用 android开源库android-gif-drawable来 加载网络gif图片 同样的DEMO下载地址在 最后 请大家去下载 . 如果gif图片地址无效 了.      请大家自行到网上去寻找一个 gif图片地址 复制过去就可以了.谢谢大家 不会在 eclipse下使用  (android开源库android-gif-drawable)     请看我的这篇博客   (android开源库android-gif-drawable)第一篇 eclipse使用

.net core中加载lua脚本的类库: MoonSharp

前言 MoonSharp是一个支持C#调用lua脚本的类库,支持.net, .net core, mono, unity,因此在.net core中也能够使用,而且加载和调用lua也很方便简单: 官网:http://www.moonsharp.org/ 源码:https://github.com/xanathar/moonsharp nuget:PM> Install-Package MoonSharp 使用 加载脚本 1 string scriptCode = @" 2 sum = 0

Flexigrid从对象中加载数据

Flexigrid是用来动态加载数据的一种比较好(老)的Jquery表插件,然后有些时候,我们需要其从本地或者jQuery对象中加载数据,比如有这么个需求,页面显示中有两个表格A和B,其中A表格从服务器端加载数据,B表格需要根据用户的操作来动态更新,例如当用户勾选住A表格的某些项时,B表格就把这些项显示在其中.对于这么个请求,可以如下解决: 1)建立一个Jquery对象C,用于保存B表格的信息: 2)当用户选择A表格中的某些项时,C更新它所保存的内容: 3)当C的内容发生变化时,B表格更新其显示

安卓 使用LruCache 加载图片 遇到的问题

本来 使用listview的时候 加载大图片的时候 会遇到内存溢出而导致崩溃. 但是使用LruCache的时候 原本以为可以 解决这个问题.  但是发现还是出现了内存溢出的情况.   困扰很久 另外,在图片下载完毕 保存在本地后,却发现读取大量图片的时候 ,利用lrucache 却不会内存泄漏而导致崩溃. 最后经过查看日志 发现,  在网络加载的时候 很吃内存,随着不断产生线程去下载图片, 能够看到 虚拟机释放内存的时候基本起不到作用 每次最多释放十几K,内存基本上快占满了... 而加载本地图片

Arcgis for js,Openlayers中加载GeoJSON

概述: 在前文中,讲述了在JAVA环境下如何将shp转换为GeoJSON,在本文,分别讲述在Arcgis for js,Openlayers2和Openlayers3中加载展示GeoJSON. 实现: 1.Openlayers2中加载GeoJSON 在OL2中,可以直接调用OL2的借口实现GeoJSON的加载,代码示例: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT