不要将Button的背景设置为selector

  在布局文件和代码中,都可以为Button设置background为selector,这样方便实现按钮的正反选效果,但实际跟踪发现,如果是将Button的背景设置为selector,在初始化Button的时候会将正反选图片都加载在内存中(具体可以查看Android源码,在类Drawable.javacreateFromXmlInner方法中对图片进行解析,最终调用Drawableinflate方法),相当于一个按钮占用了两张相同大小图片所使用的内存,如果一个界面上按钮很多或者是按钮很大,光是按钮占用的内存就会很大,可以通过在布局文件中给按钮只设置正常状态下的背景图片,然后在代码中监听按钮的点击状态,当按下按钮时为按钮设置反选效果的图片,抬起时重新设置为正常状态下的背景。

如果你觉得为一个按钮提供正反选两张图片会导致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内存优化之图片优化相关推荐

  1. Android App界面和流畅度优化

    Android App界面和流畅度优化 所谓界面和流畅度优化,就是尽可能多地消除用户可直接感知的.影响用户操作体验的bug 1.人为在UI线程中做轻微耗时操作,导致UI线程卡顿 人为避免一切耗时操作 ...

  2. Android手机内存管理与性能优化

    Android手机内存管理与性能优化&JNI.NDK高级编程(JNI.Dalvik.内存监测) 课程分类:Android 适合人群:中级 课时数量:34小节课时 用到技术:Dalvik,DDM ...

  3. 前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论

    新闻热点 国内国外,前端最新动态 Microsoft 宣发面向 iOS 与 Android 平台的 Microsoft Edge:为了保证 Windows 用户各平台使用体验的一致性,Microsof ...

  4. 前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论... 1

    前端每周清单第 34 期:Vue 现状盘点与 3.0 展望,React 代码迁移与优化,图片优化详论 作者:王下邀月熊 编辑:徐川 前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解 ...

  5. 前端性能优化(图片优化)

    从输入URL到页面加载完成的过程:首先通过DNS(域名解析)把URL解析为对应的IP地址,然后与该IP地址确定的服务器建立起TCP网络连接.随后向服务器发送HTTP请求,服务器处理完HTTP请求后把目 ...

  6. 网站SEO优化之图片优化方法

    网站SEO优化之图片优化方法 网站中图片的优化是很多站长都比较容易忽略的细节,我们知道,对于搜索引擎目前的技术来讲,是无法识别图片的内容信息的,但为了提升用户体验,我们在进行文章或者网站布局时,必须进 ...

  7. 前端性能优化之图片优化

    图片优化的价值 为什么要做图片优化?图片优化的收益有多大? Google官方的最佳实践中关于图片优化有下面这样一段描述: 对于网页来说,在所下载的字节数中,图片往往会占很大比例.因此,优化图片通常可以 ...

  8. Web 性能优化: 图片优化让网站大小减少 62%

    摘要: 压缩各种格式的图片. 原文:Web 性能优化: 图片优化让网站大小减少 62% 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是 Web 性能优化的第二篇,上一篇在下面看点 ...

  9. android 多图片优化工具,总结Android App内存优化之图片优化

    前言 在Android设备内存动不动就上G的情况下,的确没有必要去太在意APP对Android系统内存的消耗,但在实际工作中我做的是教育类的小学APP,APP中的按钮.背景.动画变换基本上全是图片,在 ...

  10. Android内存优化之图片优化

    关于图片优化,大概如下 为什么要进行图片优化 相信大概刚开始学习Android的时候有过图片过大而直接报错的情况,下面简单介绍一下OOM问题,Android支持的图片格式及图片优化的几种方式 什么是O ...

最新文章

  1. FPGA中建立时间和保持时间不满足如何解决
  2. 讲故事,学内存--Oracle
  3. 基于Apache Thrift的公路涵洞数据交互实现原理
  4. 网站页面HTML代码优化需要注意的问题
  5. 为什么我们总是「习惯性辩解」?
  6. 自动化日志收集及分析在支付宝 App 内的演进
  7. html页面div高度相减,关于html:两个div底部div到高度调整与浏览器窗口
  8. linux下安装php扩展curl
  9. lindows.javaeye.com
  10. 三宝小精灵机器人_三宝小精灵机器人
  11. C语言全局变量和局部变量总结
  12. Ubuntu论坛遭到入侵 用户数据泄露
  13. raid服务器如何备份系统,RAID服务器的系统分区备份方法
  14. js操作html节点中怎么删除子节点,在JavaScript中删除DOM节点的所有子元素
  15. 好玩的Python库tqdm
  16. 二进制和文本文件的比较
  17. 几种常用的权重初始化方法
  18. 用什么工具可以查询App日活量
  19. 增加mysql表一个字段+注释
  20. linux如何配置java环境_linux虚拟机配置java环境

热门文章

  1. java的沙盒安全模式_Java沙箱机制
  2. 【Pytorch神经网络理论篇】 13 深层卷积神经网络介绍+池化操作+深层卷积神经网络实战
  3. LeetCode 1852. 每个子数组的数字种类数(滑窗)
  4. LeetCode 1886. 判断矩阵经轮转后是否一致
  5. LeetCode 568. 最大休假天数(DP)
  6. LeetCode 681. 最近时刻
  7. 程序员面试金典 - 面试题 10.02. 变位词组(哈希map)
  8. LeetCode 1162. 地图分析(BFS)
  9. LeetCode 1381. 设计一个支持增量操作的栈(deque/数组)
  10. c++对象回收string类型成员时coredump_本体技术视点 | 虚拟机中引用性动态语言对象模型思考...