首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

android 加载图片oom若干方案小结

相关知识介绍 1.颜色模型 常见颜色模型有RGB、YUV、CMYK等,大多数图像API采用都是RGB模型,Android也是如此;另外,Android还有包含透明度Alpha颜色模型...当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用对象来解决内存不足问题。...有了上面的基础储备,我们来谈谈图片oom解决方案: (1)缓存图像到内存,采用软引用缓存到内存,不是每次使用时候都从新加载到内存; (2)调整图像大小,手机屏幕尺寸有限,分配给图像显示区域本身就更小...) 场景演示 为了说明出现OOM场景和解决OOM方法,我们选取了两款不同机型来做比较: (1)该应用展示一个gallery,该gallery只加载图片,galleryadapter传入图片路径不是图片对象本身...1-3张,之后便会出现OOM错误;Defy上不会出现错误;原因是两者内存限制不同,Defy上运行是第三方ROM,内存分配有40MB。

73280

融云技术分享:融云安卓端IM产品网络链路活技术实践

另外一种方式是利用安卓系统定时任务管理器 AlarmManager 循环执行发送心跳包任务。 这种方式不会因为系统休眠失效,系统休眠后仍然可以通过 WakeLock 唤醒,执行心跳任务。...链路不可用或者异常断开时,能及时探测启动重连等保障机制。 基于以上特性,消息链路除了前面所说心跳机制外,还另外维护了两套链路优化机制:复合连接机制和重连机制。...oom_adj 值越低,代表重要度越高,比如 native 进程, framework 层启动系统进程,优先级一般都为负数。其次是前台可见进程,系统也不会回收。...Linux 层启动,安卓 5.0 之前,优先级会比较高,不会被杀。...安卓 5.0 之后,该方式不再有效

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

腾讯技术分享:Android版手机QQ缓存监控与优化实践

实现图片缓存监控过程我们主要遇到以下几个难点: 1)内存快照文件,约300M左右: 内存文件过大会导致上传流量和存储成本比较大,而且上传耗时长。...可优化为缓存key,bitmap对象存到全局图片专用缓存; 5)图片静态引用: 定义静态Bitmap或者Drawable对象,进程周期内,对象所引用资源都无法释放。...通过分析系统源码,我们发现ZipFile记录了安装包所有的类文件信息,手Q安装包中有超过15000个文件文件越多,zipFile占用内存就越大。 ?...高内存用户是指当前可用内存不足20%用户,是OOM高发用户群,降低这部分用户比例,可有效降低OOM率。 ?...MMTLS详解》  《微信团队原创分享:Android版微信后台活实战分享(进程活篇)》  《微信团队原创分享:Android版微信后台活实战分享(网络活篇)》  《Android版微信从

1.5K20

android:persistent和android:priority区别,对进程优先级有什么影响?

关于Service活和提高Android应用Service组件优先级方法,可以总结如下: 设置最高优先级:AndroidManifest.xml文件,通过设置android:priority...双进程守护(Android 5.0前有效):通过启动一个独立守护进程与主进程相互监控和拉活。...像素Activity活方案(不推荐):创建一个透明1像素Activity,设置为悬浮窗口,以维持应用运行。...确实,通过将自己应用作为系统应用(安装目录为/system/apk/),设置android:persistent="true"属性,可以实现持久性,即应用会在系统启动时加载,并在异常出现时自动重新启动...因此,为了保证应用可靠性和稳定性,通常还需要结合其他方法来实现Service活和提高优先级需求。

31110

Bitmap 详解

recycler 相关 Android,Bitmap存储分为两部分,一部分是Bitmap数据,一部分是Bitmap引用。...Android2.3时代,Bitmap引用是放在堆Bitmap数据部分是放在栈,需要用户调用recycle方法手动进行内存回收,而在Android2.3之后,整个Bitmap,包括数据和引用...  }     捕获异常,因为Bitmap耗内存,避免出现OOM被Crash掉 一定要对OutOfMemory异常进行捕获     Bitmap bitmap = null;       ...比如一个Activity会展示一些用户头像列表,如果用户没有设置头像的话,则会显示一个默认头像,而这个头像是位于应用程序本身资源文件。如果有类似上面的场景,就可以对同一Bitmap进行缓存。...质量压缩是保持像素前提下改变图片位深及透明度等,来达到压缩图片目的,经过它压缩图片文件大小(kb)会有改变,但是导入成bitmap后占得内存是不变,宽高也不会改变。

2K20

Android常见面试题

启动会就会调用一个checkStartActivityResult()方法,如果说没有配置清单配置有这个组件,就会在这个方法抛出异常了。...Service,然后再将后启动Service做stop处理 熟悉Android系统童鞋都知道,系统出于体验和性能上考虑,app退到后台时系统并不会真正kill掉这个进程,而是将其缓存起来。...属性动画:Android3.0时候才支持,通过不断改变View属性,不断重绘形成动画效果。相比于视图动画,View属性是真正改变了。比如view旋转,放大,缩小。...缓存构成了三级缓存, 优点: 图片存储安卓系统匿名共享内存, 不是虚拟机堆内存, 图片中间缓冲数据也存放在本地堆内存, 所以, 应用程序有更多内存使用, 不会因为图片加载导致oom,...使用这个项目,会导致项目对这个框架依赖非常严重,一旦这个框架出现问题,那么对项目来说影响非常

1.2K10

Android 内存优化总结&实践

然而大部分开发者观看下自己异常上报系统,还是会发现各种内存问题仍然层出不穷,各种OOM为crash率贡献不少。...由此也衍生了很多进程方法(提高优先级,互相唤醒,native活等等),出现了国内各种全家桶,甚至各种杀不死进程。...当然你可以去兑换5元,10元,而在Android系统里就没那么幸运了,系统会直接拒绝为你分配内存,扔一个OOM给你(有人说Android系统并不会对Heap中空闲内存区域做碎片整理,待验证)。...platform-tools/hprof-conv.exe可以直接进行转换,用法:hprof-conv 原文件.hprof 新文件.hprof。...还有一些比较奇怪情况,这里是我们扫描歌曲文件时候发生,有些文件头居然有几百M,导致一次申请了过大内存,直接OOM,这里暂时也无法修复,直接catch住out of memory error。

1.9K71

Android面试题含答案「建议收藏」

启动会就会调用一个checkStartActivityResult()方法,如果说没有配置清单配置有这个组件,就会在这个方法抛出异常了。...Service,然后再将后启动Service做stop处理 熟悉Android系统童鞋都知道,系统出于体验和性能上考虑,app退到后台时系统并不会真正kill掉这个进程,而是将其缓存起来。...属性动画:Android3.0时候才支持,通过不断改变View属性,不断重绘形成动画效果。相比于视图动画,View属性是真正改变了。比如view旋转,放大,缩小。...缓存构成了三级缓存, 优点: 图片存储安卓系统匿名共享内存, 不是虚拟机堆内存, 图片中间缓冲数据也存放在本地堆内存, 所以, 应用程序有更多内存使用, 不会因为图片加载导致oom,...使用这个项目,会导致项目对这个框架依赖非常严重,一旦这个框架出现问题,那么对项目来说影响非常

1.3K20

应用活终极总结(二):Android6.0及以上活实践(进程防杀篇)

原作者:“裂缝阳光dg”,本文现已重新修订整理发布,感谢原作者无私分享。...然后Android系统会根据当前系统资源和进程oom_adj值来回收相应进程,前台进程一般不会被回收,空进程最容易被回收,这种管理规则就是"传说中"Low Memory Killer。...另外,oom_adj值也会随着占用物理内存越大增大,系统进程绝对不会被系统杀死。 接下来我将首先分析市面上主流APP防杀方式,为我接下来方案提供参考依据,请继续往下阅读。...其他如三星C9(Android 6.0)活较好,特别是当一键清理时,"咕咚会自动启动,估计是使用了进程守护策略,三星使用是原生系统,因此结果你懂得;360F4(Android 6.0)活很差,不愧是流氓战斗机...封装了很多通用操作窗口方法...好了,不扯远了,既然我们已经知道Window对象一个Activity位置,这里我们通过getWindow方法来获得SinglePixelActivity Window

3.8K21

APP生死之道

本身问题导致进程回收,第3种是系统行为,也是我们做APP活可以做地方。...所以这里有2个最直接相关值: 内存阈值 oom_adj值 1、LMK之内存阈值 LMK是个多层次内存回收器,它会根据内存不同阈值进行内存回收,具体内存阈值是写在系统文件,位置/sys...oom_adj值,oom_score_adj是一样) 他们也是写入到文件,具体/proc//下: /proc//oom_adj /proc//oom_score_adj...根据进程当前活动组件重要程度,Android会对进程优先级进行评定,这个可以ProcessList.java里可以看到,具体为(基于android 8.0): adj adj值 解释 UNKNOWN_ADJ...这样,即便在执行任务之前应用程序进程被杀,也不会导致任务不会执行,因为系统服务JobScheduler会使用bindServiceAsUser方法把实现了JobService子类服务启动起来,执行它

1.2K31

Android进程活全攻略(上)

android:persistent=“true” 代码实现(清单文件配置): 活程度:一般情况下不被杀,会被 force stop 杀死 <application android:name...可以监听系统静态广播列表如下: 活强度:我们可以发现,这个方法都是监听系统一些广播,所以我们需要在我们应用中注册静态广播,但是静态广播又会出现问题,那就是4.0版本以上,没有启动过应用或...活强度: 该方案局限性除与系统广播一样因素外,主要受如下因素限制: 1) 反编译分析过第三方应用多少 2) 第三方应用广播属于应用私有,当前版本中有效广播,在后续版本随时就可能被移除或被改为不外发...文件中有android:authorities属性。...最新 Android 版本(Android N)系统好像对账户同步这里做了变动,该方法不再有效

1K50

Android开发高级系列】进程活专题

Android系统会根据当前系统资源和进程oom_adj值来回收相应进程,前台进程一般不会被回收,空进程最容易被回收,这种管理规则就是"传说中"Low Memory Killer。         ...另外,oom_adj值也会随着占用物理内存越大增大,系统进程绝对不会被系统杀死。...活强度:         该方案局限性除与系统广播一样因素外,主要受如下因素限制:     1) 反编译分析过第三方应用多少     2) 第三方应用广播属于应用私有,当前版本中有效广播,...:contentAuthority 指定要同步ContentProvider在其AndroidManifest.xml文件中有android:authorities属性。     ...最新 Android 版本(Android N)系统好像对账户同步这里做了变动,该方法不再有效

48930

Android面试大纲(集合)

Service面试题 1、Service是什么 Service是四组件之一,它可以在后台执行长时间运行操作没有用户界面的应用组件 2、Service和Thread区别 Service是安卓系统组件...(内存溢出),当前占用内存加上我们申请内存资源超过了Dalvik虚拟机最大内存限制就会抛出Out of memory异常 2、OOM相关概念 内存溢出:指程序申请内存时,没有足够空间供其使用 内存泄漏...,它提供get方法和put方法来获取缓存和添加缓存,其最重要方法trimToSize是用来移除最少使用缓存和使用最久缓存,添加最新存到队列 3、计算inSampleSize public...数组最前面 ClassLoader会遍历dexElements数组,找到最前面的dex文件优先加载 24 进程活面试题 1、进程优先级 空进程 后台进程 服务进程 可见进程 前台进程 2、Android...进程回收策略 Low memory Killer(定时执行):通过一些比较复杂评分机制,对进程进行打分,然后将分数高进程判定为bad进程,杀死释放内存 OOM_ODJ:判别进程优先级 3、Android

1.1K20

android 减少图片出现oom错误

在做Android图片程序时候,由于图片比较多,很有很机会出现OOM机会,根据网上资料做了些总结,期待能够减少OOM出现机会。...1.使用底层方法来替代使用java层方法 尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张图。   ...在读取时加上图片Config参数,可以跟有效减少加载内存,  通过使用这样办法,能更有效阻止抛out of Memory异常 另外,decodeStream直接拿图片来读取字节码了, 不会根据机器各种分辨率来自动适应...优化虚拟机堆内存使用 对于Android平台来说,其托管层使用Dalvik Java VM从目前表现来看还有很多地方可以优化处理,比如我们开发一些大型游戏或耗资源应用可能考虑手动干涉GC处理...我们总不能将原始图片加载到内存再进行缩放处理吧,要知道移动开发,内存是相当宝贵,而且一张100K图片,加载完所占用内存何止100K?

80960

微信 Android 终端内存优化实践

解决各种问题过程,我们积累了一些相对有效和多面的优化手段及工具,从监控上报到开发阶段测试检查,为预防和解决问题提供帮助,还在不断持续改进。...对有效解决问题意义非常。 ?...,一些需要类似解码场景下就会出现无法临时分配数十 MB 内存供图片显示导致 OOM,因此 Monkey Test 时认为 Java Heap 占用超过 200 MB 即为异常。...定位解决这几个问题后,我们 crash 系统和厂商反馈这种类型 OOM 确实降低了不少。所以监控线程数,收敛线程也成为我们降低 OOM 有效手段之一。...从本地测试及灰度结果上看,应用上该兜底策略,可以有效减少用户出现 OOM 情况,灰度 5w 用户,有 3、4 个是命中了这个兜底策略,但具体兜底策略是否合理,还需要经过更严格测试才能确认上线

13.3K00

对Bitmap内存优化

Android应用里,最耗费内存就是图片资源。而且Android系统,读取位图Bitmap时,分给虚拟机图片堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常。...如果发生了OutOfMemory异常,应用不会崩溃,而是得到了一个默认Bitmap图。 经验分享:     很多开发者会习惯性代码中直接捕获Exception。...比如一个Activity会展示一些用户头像列表,如果用户没有设置头像的话,则会显示一个默认头像,而这个头像是位于应用程序本身资源文件。...比如说,开发网络应用过程,可以将一些从网络上获取数据保存到SD卡,下次直接从SD卡读取,不从网络读取,从而节省网络流量。这种方式就是硬盘缓存。...如果不需要缩小,设置inSampleSize值为1。如果需要缩小,则动态计算设置inSampleSize值,对图片进行缩小

1.3K50

Androidbitmap和优化

而且Android系统,读取位图Bitmap时,分给虚拟机图片堆栈大小只有    8M,如果超出了,就会出现OutOfMemory异常。...一般来说,如果能够获得Bitmap对象引用,就需要及时调用Bitmaprecycle()方法来释放Bitmap占用内存空间,不要等Android系统来进行释放。...这里所说缓存有两个级别,一个是硬盘缓存,一个是内存缓存。比如说,开发网络应用过程,可以将一些从网络上获取数据保存到SD卡,下次直接从SD卡读取,不从网络读取,从而节省网络流量。...如果不需要缩小,设置inSampleSize值为1。如果需要缩小,则动态计算设置inSampleSize值,对图片进行缩小。...也不会被销毁,因此就出现了内存泄露问题。

47010

Bitmap图片压缩,图加载防止OOM

load-bitmap) 这两篇文章已经做了很明确指出了如何高效加载图。...先看一些基础知识(后面有答案) Android官网-提供备用位图 这篇文章链接有讲到: 要在像素密度不同设备上提供良好图形质量,您应该以相应分辨率应用中提供每个位图多个版本(针对每个密度级别提供一个版本...否则,Android 系统必须缩放位图,使其每个屏幕上占据相同可见空间,从而导致缩放失真,如模糊。...例如,如果 1024x768 像素图片最终会在 ImageView 显示为 128x96 像素缩略图,则不值得将其加载到内存。...mRect 宽高不能太大,否则加载得到 Bitmap 时候也会出现 OOM 异常

2.6K00

深入探索 Android 内存优化(炼狱级别-上)

那是因为放在 内存 ,展示会更 “快”,快原因有两点,如下所示: 1)、硬件快:内存本身读取、存入速度快。 2)、复用快:解码成果有效保存,复用时,直接使用解码后对象,不是再做一次图像解码。...此外,除了因内存泄漏累积到一定程度导致OOM情况以外,也有一次性申请很多内存,比如说 一次创建数组或者是载入文件如图片时候会导致OOM。...而且,实际情况下 很多OOM就是因图片处理不当 产生。 二、常见工具选择 Android性能优化之内存优化我们已经介绍过了相关优化工具,这里再简单回顾一下。...5、线下图片检测 开发过程,如果检测到不合规图片使用(如图片宽度超过View宽度甚至屏幕宽度),应该立刻提示图片所在Activity和堆栈,让开发人员更快发现解决问题。...9、设置内存兜底策略 设置内存兜底策略目的,是为了 在用户无感知情况下,接近触发系统异常前,选择合适场景杀死进程并将其重启,从而使得应用内存占用回到正常情况。

1.1K31

Bitmap图片压缩,图加载防止OOM

在这里插入图片描述 前言 Android官网处理位图 和 高效加载大型位图 这两篇文章已经做了很明确指出了如何高效加载图。...先看一些基础知识(后面有答案) Android官网-提供备用位图 这篇文章链接有讲到: 要在像素密度不同设备上提供良好图形质量,您应该以相应分辨率应用中提供每个位图多个版本(针对每个密度级别提供一个版本...否则,Android 系统必须缩放位图,使其每个屏幕上占据相同可见空间,从而导致缩放失真,如模糊。 ?...例如,如果 1024x768 像素图片最终会在 ImageView 显示为 128x96 像素缩略图,则不值得将其加载到内存。...mRect 宽高不能太大,否则加载得到 Bitmap 时候也会出现 OOM 异常

1.9K20
领券