Android App内存优化之图片优化

不要将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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql加上唯一索引后批量插入_MySQL当批量插入遇上唯一索引

一、背景以前使用SQL Server进行表分区的时候就碰到很多关于唯一索引的问题&#xff1a;Step8&#xff1a;SQL Server 当表分区遇上唯一约束&#xff0c;没想到在MySQL的分区中一样会遇到这样的问题&#xff1a;MySQL表分区实战。今天我们来了解MySQL唯一索引的一些知识&#x…

我们为什么要探索人脑的奥秘?

来源&#xff1a;脑科学与智能技术卓越创新中心 4月5日21:30&#xff0c;4月11日9:00&#xff0c;CCTV-2央视财经频道《中国经济大讲堂》特邀中国科学院脑科学与智能技术卓越创新中心学术主任蒲慕明院士深度解读《我们为什么要探索人脑的奥秘&#xff1f;》未来智能实验室的主要…

pc计算机中ram的编址单位,字母编址

对于CPU而言&#xff0c;如果它要发数据到某个设备&#xff0c;其实是发到对应的接口&#xff0c;接口电路里有多个寄存器(也称为端口)&#xff0c;访问设备实际上是访问相关的端口&#xff0c;所有的信息会由接口转给它的设备。那么CPU会准备数据发送到数据总线&#xff0c;但…

DuiVision开发教程(19)-菜单

DuiVision菜单类是CDuiMenu。有两种显示的位置&#xff0c;一种是在窗体顶部某个button点击后能够下拉一个菜单&#xff0c;还有一种是托盘图标的右键菜单。 窗体中的菜单定义方式是xml文件里设置某个button的action属性&#xff0c;以menu:开头。后面是菜单的XML文件名称或XM…

python多线程操作列表_详解Python多线程下的list

list 是 Python 常用的几个基本数据类型之一.正常情况下我们会对 list 有增删改查的操作,显然易见不会有任何问题.那么如果我们试着在多线程下操作list 会有问题吗?多线程下的 list安全 or 不安全&#xff1f; 不安全&#xff01;通常我们说的线程安全是指针对某个数据结构的所…

值得收藏!深度报告解读NB-IoT

来源&#xff1a;物联传媒2019年NB-IoT行业获得了快速发展&#xff0c;用户数有望较2018年提升3倍以上&#xff0c;预计随着2020年基站数的大幅提升&#xff0c;为行业发展提供更进一步的支撑&#xff0c;加速技术成熟度提升&#xff0c;用户数有望保持快速增长。NB-IoT是万物互…

我的世界中国版服务器无限夜视,我的世界服务器游戏技巧 无限夜视的方法

来源&#xff1a;游戏园日期&#xff1a;2019-06-12 04:03:49我的世界服务器游戏技巧 无限夜视的方法。那下面给大家分享的是一些大家可能不知道的游戏技巧&#xff0c;那下面就一起来看看都是些什么技巧吧&#xff01;对了&#xff0c;里面还有关于服务器无限夜视的方法哦&…

澳洲虚拟主机空间_澳洲空间|澳洲虚拟主机|澳洲主机|澳洲虚拟空间-万纵科技 www.xmwzidc.cn...

澳洲虚拟主机主要应用于外贸美洲的澳洲网站空间:澳洲联邦共和国是拉丁美洲最大的国家&#xff0c;人口数居世界第五&#xff0c;面积居世界第五。其国土位于中南美洲与大西洋之间&#xff0c;面积为世界第五大&#xff0c;仅次于俄罗斯、澳洲、美国与中国&#xff0c;与乌拉圭、…

Oracle锁表查询和解锁方法

数据库操作语句的分类 DDL&#xff1a;数据库模式定义语言&#xff0c;关键字&#xff1a;createDML&#xff1a;数据操纵语言&#xff0c;关键字&#xff1a;Insert、delete、updateDCL&#xff1a;数据库控制语言 &#xff0c;关键字&#xff1a;grant、removeDQL&#xff1a…

揭秘5G+AI时代的机器人世界!七大核心技术改变人类生活

来源&#xff1a;世界人工智能大会 AI 和 5G 与机器人技术结合&#xff0c;正在不断催生新的消费电子品类。AI 解决机器理解世界&#xff0c;以及人机交互的问题。5G 拓展机器人的活动边界&#xff0c;并为机器人提供更大的算力和存储空间&#xff08;云协作机器人&#xff09;…

服务器热修复,热修复探究,hotfix,patch

常见场景App打包发出后1.忘了关掉Log输出了2.存在一个业务逻辑触发必崩溃3.某个本地图标忘了替换成新的遇到这些问题&#xff0c;若是Web站点&#xff0c;Mobile站点问题都不大&#xff0c;因为这些具有“持续发布”的特长&#xff0c;但是App的特点是“版本发布”&#xff0c;…

android 人脸识别边框_android Arcface人脸识别框/人脸抓拍框/人脸追踪框

为什么要改&#xff1f;先来看看sdk demo中提供的人脸框样式&#xff0c;这个框看上去并不是非常美观(个人觉得)再看看下面这个框是不是就要顺眼一点怎么换&#xff1f;先来看看原始的画法&#xff1a;Overridepublic void onAfterRender(CameraFrameData data) {mGLSurfaceVie…

html5 填表 表单 input output 与表单验证

1.<output> Js计算结果 <form οninput"res.value num1.valueAsNumber*num2.valueAsNumber"> <input type"number" id"num1"> X <!-- 没有闭合</input> --> <input type"number" id…

人工智能如何获得知识?

原发&#xff1a;人民论坛学术前沿 2019年21期转自&#xff1a;南京大学哲学系摘要&#xff1a;人构造概念以认识世界&#xff0c;人的认知与人的身体密切相关。计算机是人类心灵的延伸&#xff1b;而人类发明的各种认知用仪器&#xff08;机器&#xff09;是人类感官的延伸&am…

ajax官方api,yangguozhong

AjaxApi下面列出的接口基本都是可以直接使用的&#xff0c;如有问题记得告诉我哦1. 支持的请求方法GET(SELECT)&#xff1a;从服务器取出资源(一项或多项)。POST(CREATE)&#xff1a;在服务器新建一个资源。PUT(UPDATE)&#xff1a;在服务器更新资源(客户端提供改变后的完整资源…

改变网页标签图片(favicon)

<head>里添加如下标签&#xff1a; <link rel"shortcut icon" href"favicon.ico图片路径" type"images/x-icon" /> <link rel"icon" href"favicon.ico图片路径" type"images/x-icon" /> js动态…

报告:美国AI投资占全球56% 中国第二增长最快

来源&#xff1a;小小据外媒报道&#xff0c;由英国政府资助的科技企业家网络Tech Nation日前发布最新报告。报告显示了2015年至2019年各国企业在全球范围内获得的人工智能(AI)领域的投资情况。在这五年期间&#xff0c;美国吸引了全球56%的AI投资&#xff0c;紧随其后的是中国…

服务器图文消息发送规则,群发图文规则 - CurtainRight的个人空间 - OSCHINA - 中文开源技术交流社区...

2、上传图文接口内容信息对比&#xff1a;注意&#xff1a;除了群发图文之外&#xff0c;其余的图文消息都是没有Content&#xff0c;所以都是自己写页面&#xff0c;然后通过URL打开新的页面&#xff0c;那么你的图片就不能访问微信服务器上的图片。因为现在未经授权是不能访问…

rust怎么拆除墙壁指令_人类跌落梦境:城堡怎么过 不少玩家卡在了第六关城堡地图这里...

人类跌落梦境城堡怎么过&#xff1f;随着人类一败涂地手游上线&#xff0c;不少玩家卡在了第六关城堡地图这里。城堡怎么抓灯笼&#xff0c;这个图里风车要怎么用呢&#xff1f;这里就为大家带来人类跌落梦境第六关城堡攻略图解。人类跌落梦境城堡怎么过人类跌落梦境第六关城堡…

【工业智能】人工智能真的无所不能吗?

图1-1956年达特茅斯会议上的那些AI界大神们来源&#xff1a;产业智能官最近几年&#xff0c;随着AlphaGo逐渐干掉了人类的顶级棋手、波士顿“大狗”不断进化的能力使得人们对人工智能充满了期待&#xff0c;人工智能的热潮席卷了大学、企业&#xff0c;春风也吹进了工业这个一直…