Android App内存优化之图片优化
不要将Button的背景设置为selector
在布局文件和代码中,都可以为Button设置background为selector,这样方便实现按钮的正反选效果,但实际跟踪发现,如果是将Button的背景设置为selector,在初始化Button的时候会将正反选图片都加载在内存中(具体可以查看Android源码,在类Drawable.java
的createFromXmlInner
方法中对图片进行解析,最终调用Drawable
的inflate
方法),相当于一个按钮占用了两张相同大小图片所使用的内存,如果一个界面上按钮很多或者是按钮很大,光是按钮占用的内存就会很大,可以通过在布局文件中给按钮只设置正常状态下的背景图片,然后在代码中监听按钮的点击状态,当按下按钮时为按钮设置反选效果的图片,抬起时重新设置为正常状态下的背景。
如果你觉得为一个按钮提供正反选两张图片会导致APK的体积变大,可以通过如下方式实现按钮点击的反选效果,这种方式既不会存在Button占用两倍内存的情况,又减小了APK的体积(Android 5.0中的tintColor也可以实现类似的效果):
ImageButton personalInfoBtn = (ImageButton)findViewById(R.id.personalBtnId);
personalInfoBtn.setOnTouchListener(new OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if(action == MotionEvent.ACTION_DOWN){
((ImageButton)v).setColorFilter(getResources().getColor(0X50000000));
}else if(action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL){
((ImageButton)v).clearColorFilter();
}
// 为了不影响监听按钮的onClick回调,返回值应为false
return false;
}
});
其它优化方式
1、尽量将Activity中的小图片和背景合并,一张小图片既浪费布局的时间,又平白地增加了内存占用;
2、不要在Activity的主题中为Activity设置默认的背景图片,这样会导致Activity占用的内存翻倍:
<!--千万不要在主题中为Activity设置默认背景
<style name=
"Activity_Style"
parent=
"@android:Theme.Holo.Light.NoActionBar"
>
<item name=
"android:background"
>
@drawable
/*</item>
</style>
3、对于在需要时才显示的图片或者布局,可以使用ViewStub标签,通过sdk/tools目录下的hierarchyviewer.bat查看布局文件会发现,使用viewstub标签的组件几乎不消耗布局的时间,在代码中当需要显示时再去实例化有助于提高Activity的布局效率和节省Activity消耗的内存。
注意:如果使用到WebView、视频播放、手写、动画等功能时,关掉硬件加速会严重音效程序的运行效率,这种情况可以只关闭掉Activity中某些view的硬件加速,整个Activity的硬件加速不关闭。
如果Activity中某个View需要关闭硬件加速,但整个Activity不能关闭,可以调用view层级关闭硬件加速的方法:
setLayerType(View.LAYER_TYPE_SOFTWARE,
null
); // view.setLayerType || 在定义view的构造方法中调用该方法
转载于:https://www.cnblogs.com/lucktian/p/7019326.html
Android App内存优化之图片优化相关推荐
- Android App界面和流畅度优化
Android App界面和流畅度优化 所谓界面和流畅度优化,就是尽可能多地消除用户可直接感知的.影响用户操作体验的bug 1.人为在UI线程中做轻微耗时操作,导致UI线程卡顿 人为避免一切耗时操作 ...
- Android手机内存管理与性能优化
Android手机内存管理与性能优化&JNI.NDK高级编程(JNI.Dalvik.内存监测) 课程分类:Android 适合人群:中级 课时数量:34小节课时 用到技术:Dalvik,DDM ...
- 前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论
新闻热点 国内国外,前端最新动态 Microsoft 宣发面向 iOS 与 Android 平台的 Microsoft Edge:为了保证 Windows 用户各平台使用体验的一致性,Microsof ...
- 前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论... 1
前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论 作者:王下邀月熊 编辑:徐川 前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解 ...
- 前端性能优化(图片优化)
从输入URL到页面加载完成的过程:首先通过DNS(域名解析)把URL解析为对应的IP地址,然后与该IP地址确定的服务器建立起TCP网络连接.随后向服务器发送HTTP请求,服务器处理完HTTP请求后把目 ...
- 网站SEO优化之图片优化方法
网站SEO优化之图片优化方法 网站中图片的优化是很多站长都比较容易忽略的细节,我们知道,对于搜索引擎目前的技术来讲,是无法识别图片的内容信息的,但为了提升用户体验,我们在进行文章或者网站布局时,必须进 ...
- 前端性能优化之图片优化
图片优化的价值 为什么要做图片优化?图片优化的收益有多大? Google官方的最佳实践中关于图片优化有下面这样一段描述: 对于网页来说,在所下载的字节数中,图片往往会占很大比例.因此,优化图片通常可以 ...
- Web 性能优化: 图片优化让网站大小减少 62%
摘要: 压缩各种格式的图片. 原文:Web 性能优化: 图片优化让网站大小减少 62% 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是 Web 性能优化的第二篇,上一篇在下面看点 ...
- android 多图片优化工具,总结Android App内存优化之图片优化
前言 在Android设备内存动不动就上G的情况下,的确没有必要去太在意APP对Android系统内存的消耗,但在实际工作中我做的是教育类的小学APP,APP中的按钮.背景.动画变换基本上全是图片,在 ...
- Android内存优化之图片优化
关于图片优化,大概如下 为什么要进行图片优化 相信大概刚开始学习Android的时候有过图片过大而直接报错的情况,下面简单介绍一下OOM问题,Android支持的图片格式及图片优化的几种方式 什么是O ...
最新文章
- FPGA中建立时间和保持时间不满足如何解决
- 讲故事,学内存--Oracle
- 基于Apache Thrift的公路涵洞数据交互实现原理
- 网站页面HTML代码优化需要注意的问题
- 为什么我们总是「习惯性辩解」?
- 自动化日志收集及分析在支付宝 App 内的演进
- html页面div高度相减,关于html:两个div底部div到高度调整与浏览器窗口
- linux下安装php扩展curl
- lindows.javaeye.com
- 三宝小精灵机器人_三宝小精灵机器人
- C语言全局变量和局部变量总结
- Ubuntu论坛遭到入侵 用户数据泄露
- raid服务器如何备份系统,RAID服务器的系统分区备份方法
- js操作html节点中怎么删除子节点,在JavaScript中删除DOM节点的所有子元素
- 好玩的Python库tqdm
- 二进制和文本文件的比较
- 几种常用的权重初始化方法
- 用什么工具可以查询App日活量
- 增加mysql表一个字段+注释
- linux如何配置java环境_linux虚拟机配置java环境
热门文章
- java的沙盒安全模式_Java沙箱机制
- 【Pytorch神经网络理论篇】 13 深层卷积神经网络介绍+池化操作+深层卷积神经网络实战
- LeetCode 1852. 每个子数组的数字种类数(滑窗)
- LeetCode 1886. 判断矩阵经轮转后是否一致
- LeetCode 568. 最大休假天数(DP)
- LeetCode 681. 最近时刻
- 程序员面试金典 - 面试题 10.02. 变位词组(哈希map)
- LeetCode 1162. 地图分析(BFS)
- LeetCode 1381. 设计一个支持增量操作的栈(deque/数组)
- c++对象回收string类型成员时coredump_本体技术视点 | 虚拟机中引用性动态语言对象模型思考...