android app内存图片优化的方法:1、将activity中的小图片和背景合并;2、不要在activity的主题中为activity设置默认的背景图片;3、对于在需要时才显示的图片或者布局,可以使用viewstub标签。
android app内存怎么优化?
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")@overridepublic 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回调,返回值应为falsereturn false;}});
其它优化方式
1、尽量将activity中的小图片和背景合并,一张小图片既浪费布局的时间,又平白地增加了内存占用;
2、不要在activity的主题中为activity设置默认的背景图片,这样会导致activity占用的内存翻倍;
3、对于在需要时才显示的图片或者布局,可以使用viewstub标签,通过sdk/tools目录下的hierarchyviewer.bat查看布局文件会发现,使用viewstub标签的组件几乎不消耗布局的时间,在代码中当需要显示时再去实例化有助于提高activity的布局效率和节省activity消耗的内存。
注意:如果使用到webview、视频播放、手写、动画等功能时,关掉硬件加速会严重音效程序的运行效率,这种情况可以只关闭掉activity中某些view的硬件加速,整个activity的硬件加速不关闭。
如果activity中某个view需要关闭硬件加速,但整个activity不能关闭,可以调用view层级关闭硬件加速的方法:
更多php相关知识,请访问!