学习
实践
活动
工具
TVP
写文章

android加载,防止oom

高效加载图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状、不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小。 下面我们就来看一看,如何对一张图片进行适当的压缩,让它能够以最佳大小显示的同时,还能防止OOM的出现。 ,但是当你需要在界面上加载堆图片的时候,情况就变得复杂起来。 其中最核心的类是LruCache (此类在android-support-v4的包中提供) 。 但是现在已经不再推荐使用这种方式了,因为从 Android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用的对象,这让软引用和弱引用变得不再可靠。

70490

Android中高效的加载

原文地址:ronaldong 原文作者: https://juejin.im/post/5b0e6e6a5188251570336972 将加载到内存中总是令人痛苦,因为我们经常会在应用的崩溃报告中看到 大家都知道,Android系统的内存有限。我们必须牢记这一点。 stackoverflow上有很多关于加载的问题,当你的应用程序遇到OOM的时候,你可以选择直接复制粘贴其中的答案来解决这个问题。 因此,你完全可以略过本篇文章,但我想介绍一些加载的基础知识及其实际工作的原理。 我只想解释图片解码背后的逻辑。我建议你使用Picasso或Glide来加载图片。没有必要重新发明轮子。 一旦将图片加载到内存中,它就不再被压缩,并占用尽可能多的图片的所有像素所需的内存空间。 加载的步骤 获取图片的宽和高 根据图片的宽和高计算缩放比 根据缩放比将图片加载到内存中。 在android官方文档中,计算结果是2的幂次方。

22520
  • 广告
    关闭

    2022腾讯全球数字生态大会

    11月30-12月1日,邀您一起“数实创新,产业共进”!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    vue图片加载(默认、小加载加载失败

    但是对于一些特殊场景就需要对图片特殊处理,比如:默认、大小加载等。 为了解决上述问题,如果小可以加载,则直接使用小,如果小不能加载,则先使用加载中的图片去渲染,当原图加载成功以后,渲染上对应的原图,如果当原图也渲染失败(比如服务器响应客户端最大时间为30秒,网速过慢导致该时间内未完成 ", // 小加载失败,会先使用loading图片占位,避免页面卡顿,等待加载完成使用 small: "https://xixixi.net.cn/resources/images ", // 小地址都加载失败,会使用加载失败图片 small: "https://xixixi.net.cn/resources/images/small_err.png", ,:loading是加载中的图片地址,:big是的图片地址,:error是图片加载失败的图片地址。

    83100

    Android之高效加载的方法示例

    加载到内存是一件令人头疼的事情。因为的原因,我们会在Crash报告中看到OOM(内存不足).Android的内存有限,这一点我们应该心里有数。 但是对于其他人来说,我想告诉你们一些加载的知识和原理。 加载Bitmap到内存 so easy.你所需要做的就是使用BitmapFactory解码你的图片。 步骤 不用加载图片到内存获取其尺寸 通过图片尺寸计算缩放系数 通过计算后值加载图片到内存 BitmapFactory.Options 这个类是个元数据提供器,我们可以通过这个类来完成第一步。 Android官方文档中,是基于2的幂次方来计算inSampleSize的。 翻译自: Loading Large Bitmaps Efficiently in Android 以上就是本文的全部内容,希望对大家的学习有所帮助。

    28031

    android如何加载

    思路:那就是对于一张巨型图片我们可否每次指定一块区域加载显示,然后通过改变这个区域完成整张巨加载呢?这样内存中只有完整图片的一块区域。 接下来通过自定义一个可以加载的View展开说明: 2、设置图片 前面说到至少需要两个方法:1、设置图片 2、指定显示区域 我们先来看如何设置图片: mOptions实际就是BitmapFactory.Options 3、指定显示区域 在onMeasure方法中我们需要指定要加载图片的区域Rect的四个顶点位置。 四、改变区域完成巨加载 1、Scroller + GestureDetector 上面说到我们通过Rect指定显示区域,那通过改变要显示的区域位置不就可以完成整张图片的加载了? 至此如何加载显示一张巨就实现了。

    18620

    Android实现网络加载图片点击后浏览可缩放

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 找了一些demo感觉没有自己想要的效果,于是借鉴一些改造一下并记录下来; 1、主Activity public

    22310

    android实现长加载效果

    加载要用到一个关键的类BitmapRegionDecoder,长加载会使用到bitmap内存复用, 比如view大小是440*654,图片的宽高是440*12000,那么这个时候就要获取图片的宽和高 , 跟view的宽和高进行对比,获取到一个缩小比例,那么会得到宽一个比例,高一个比例,用的比例作为缩放因子,然后配合手势滑动滑动长 import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapRegionDecoder ; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Rect; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.widget.Scroller

    24320

    Android开发实现ImageView加载摄像头拍摄的功能

    本文实例讲述了Android开发实现ImageView加载摄像头拍摄的功能。分享给大家供大家参考,具体如下: 这个方法是从官方demo中摘录的,在此记录学习。 权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" / <uses-feature android :name="android.hardware.camera2" android:required="false" / 另:关于权限控制还可参考:Android Manifest功能与权限描述大全 相关内容感兴趣的读者可查看本站专题:《Android拍照与图片处理技巧总结》、《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总 》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》 希望本文所述对大家Android程序设计有所帮助

    20810

    Android 加载GIF最佳实践方案

    起因 最近在项目中遇到需要在界面上显示一个本地的 GIF 。按照惯例我直接用了 Glide 框架来实现。 看了一下我的 gif ,大小还是 800K ,是不是图片太大了,换了一张 100K 的 gif ,这次显示的效果很好,gif 播放的很流畅。 android-gif-drawable : https://github.com/koral–/android-gif-drawable 引用: compile 'pl.droidsonroids.gif android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable 加载GIF最佳实践方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

    1.1K31

    Android高效加载、多图解决方案,有效避免程序OOM

    高效加载图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状、不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小。 下面我们就来看一看,如何对一张图片进行适当的压缩,让它能够以最佳大小显示的同时,还能防止OOM的出现。 ,但是当你需要在界面上加载堆图片的时候,情况就变得复杂起来。 其中最核心的类是LruCache (此类在android-support-v4的包中提供) 。 Android Doc,我翻译之后又做了些加工,英文好的朋友也可以直接去读原文。

    1.4K70

    Bitmap图片压缩,加载防止OOM

    在这里插入图片描述 前言 Android官网中处理位图 和 高效加载大型位图 这两篇文章中已经做了很明确指出了如何高效的加载Android Bitmap使用的三种颜色格式: ALPHA_8–每个像素占1个字节,存储透明度信息,没有颜色信息。 否则,Android 系统必须缩放位图,使其在每个屏幕上占据相同的可见空间,从而导致缩放失真,如模糊。 ? 如果对 Android 使用的这两种采样算法效果不满意,必要时可以引入其他的算法。 (加载到堆内存时已经缩放了大小了,.9 会忽略此标志) inDensity:加载图片的原始宽度,如果此密度与 inTargetDensity 不匹配,则在返回 Bitmap前会将它缩放至目标密度。

    42120

    Bitmap图片压缩,加载防止OOM

    [在这里插入图片描述] 前言 Android官网中处理位图 和 [高效加载大型位图 ](https://developer.android.com/topic/performance/graphics/ load-bitmap) 这两篇文章中已经做了很明确指出了如何高效的加载。 否则,Android 系统必须缩放位图,使其在每个屏幕上占据相同的可见空间,从而导致缩放失真,如模糊。 如果对 Android 使用的这两种采样算法效果不满意,必要时可以引入其他的算法。 (加载到堆内存时已经缩放了大小了,.9 会忽略此标志) inDensity:加载图片的原始宽度,如果此密度与 inTargetDensity 不匹配,则在返回 Bitmap前会将它缩放至目标密度。

    1.1K00

    Android仿ios加载loading菊花效果

    项目中经常会用到加载数据的loading显示,除了设计根据app自身设计的动画loading,一般用的比较多的是仿照ios 的菊花加载loading ,当然一些条件下还会涉及到加载成功/ 失败情况的显示 使用ProgressBar 来加载动画转圈,这里使用drawable文件 定义转圈动画, indeterminateDrawable 属性进行加载。 <? /anim" / 部分情况下,在加载成功/ 失败之后会显示对应的静态图片,所以一开始想直接通过 setIndeterminateDrawable(Drawable d) 来加载静态图片,但是直接写是显示不出图片的 :text="正在加载" android:textColor="#fff" / </LinearLayout 自定义view,提供三种状态的方法。 /** * 提示文字 */ public void setText(@StringRes int txtId) { tv.setText(txtId); } } 效果

    1.2K40

    Android实现滚动显示效果

    想使用mapView来加载已有图片,但是没有成功,后来也使用了Srollview控件,和最常用的imageView,还是没有成功。 关键代码: 布局文件中imageView控件如下 <ImageView android:layout_width="wrap_content" android:layout_height ="wrap_content" android:id="@+id/img" android:scaleType="center" android:background="#fff" android:src="@drawable/picName" / Activity文件中主要代码如下 @Override public void onCreate(Bundle savedInstanceState

    37320

    Android 多媒体开发学习之加载图片

    在实际中,有些时候我们需要从SD卡中加载一张很大的图片到内存中,但是如果你手机存储很小的话,如果直接将这张大图片放入内容就会导致分配失败等异常问题。 所以我们就需要一种手段,将图片也能正常的加载到内存,而不出现异常的情况。 那如何才能将图片加载到内存中,而不出现内存溢出? Android系统提供了一个方法,通过显示比例加载图片,这样就会返回比原图更小的图片。 1: 先要获取该图片的参数情况,Android系统提供了一个BitmapFactory这个类 可以创建一个Bitmap对象,从不同的源可以获取图片资源。 R.id.iv);                 iView.setImageBitmap(bitmap);             }         });             } } 效果

    20330

    Android仿微博加载滚动查看效果

    本文实例为大家分享了Android加载长图片的具体代码,供大家参考,具体内容如下 解决步骤 1.将图片缩放到与控件等宽 2.判断缩放后的图片高度,如果高度大于控件高度较多(这里设置的是1.5倍) ,认定为长,可滑动查看图片 |-如果高度小于控件高度的1.5倍,以控件高度为基准,重新缩放图片 package org.wandcf_ces.fairproject.widgets; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint ; import android.graphics.Rect; import android.graphics.RectF; import android.os.Build; import android.support.annotation.Nullable * 加载长图片 * 解决步骤 * 1.将图片缩放到与控件等宽 * 2.判断缩放后的图片高度,如果高度大于控件高度较多(这里设置的是1.5倍),认定为长,可滑动查看图片 *

    39320

    Android:加载时精确获取图片格式

    ---- 一、开始挖坑 项目中有一个点击查看大图的需求,并且在模式下支持手势缩放,所以,我们必然会用到 chrisbanes 大神的 PhotoView,主要使用的是其中的PhotoView 和 使用PhotoView加载《清明上河图》这种巨时,图片会展示为一个小长条,并且极易产生OOM。 为了解决这个问题,先是参考 鸿洋大神的 《Android 高清加载方案 拒绝压缩图片》这篇文章,但是实现的效果特别卡。 该组件底层是使用分段加载的模式实现,能够支持巨加载,内部也封装了手势缩放。但是,该组件不支持 GIF动! 基于以上两个控件,在加载网络图片时,会先判断是否是GIF动,是动则使用PhotoView展示;如果是静态,不区分是巨还是普通,统一使用SubsamplingScaleImageView加载

    93330

    Android Studio使用Vector创建矢量加载

    先来一张效果: ? 滑稽.png 1.在工程的res目录下新建一个drawable目录,如图所示: ? 2.点击右键 ->New --> Vector Asset ? 关于png或者jpg转成SVG矢量的方法,请看链接: http://www.jianshu.com/p/456157dfe0b0 在线转换SVG网址: https://www.vectorizer.io 4.这时候我们就可以在drawable目录看到一个ic_huaji.xml的文件了,打开右边的预览就可以看到了。 【注:这个大的背景是我下载了一个sexy Editor的插件,我弄的一张滑稽的作为背景的,这个跟我们今天讲的vector没有任何关系的。】 ? 5.下面是重点了。 (1) 首先,在布局里面设置属性 android:background="@drawable/ic_huaji" ? (2) 在Activity里面直接引用这个布局。 ?

    1.4K10

    有效解决Android加载图片内存溢出的问题

    解决Android加载图片内存溢出的问题 非著名程序员 ? 今天在交流群里,有人问我他经常遇到加载图片时内存溢出的问题,遇到的情况还是在自己的测试机或者手机里没有问题,做好了, 到了客户手机里就内存溢出了。 那我们怎么样有效解决Android加载图片时内存溢出的问题? 那么接下来,我们就来说说这个问题: 首先,我们要知道尽量的不要使用setImageResource或setImageBitmap或BitmapFactory.decodeResource来设置一张, 其实,如果在读取时加上图片的Config参数,可以很有效的减少加载的内存,从而能很有效的阻止抛out of Memory异常。

    94450

    Android中Glide加载到RelativeLayout背景方法示例

    前言 Glide是 Google推荐的图片加载库,它可以支持来自url,Android资源,文件,Uri中的图片加载,同时还支持gif图片的加载,以及各种图片显示前的bitmap处理(例如:圆角图片,圆形图片 一般情况下我们都是使用Glide加载图片到ImageView上,那么如何加载到RelativeLayout的背景上呢? 示例代码 Glide.with(CommodityActivity.this) .load("你需要加载的网址或其他参数") .asBitmap() .into(new SimpleTarget drawable);<span style="white-space:pre" </span //设置背景 } } }); Glide4.4使用方法如下: view即我们想要加载的控件

    73310

    扫码关注腾讯云开发者

    领取腾讯云代金券