社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 307阅读
  • 2回复

[分享]安卓 关于 Activity 背景图 内存优化 方案

楼层直达
z3960 
级别: 茶馆馆主
发帖
770867
飞翔币
207694
威望
215657
飞扬币
2511646
信誉值
8



未优化前

1.png优化方案
可以对图片压缩:https://tinypng.com/这网站用于压缩图片的,贼好使;代码对图片处理:给xml的父布局设置id初始化的时候使用的加载方式:Glide.with(mActivity).load(R.drawable.bg_login).asBitmap().into(new SimpleTarget<Bitmap>() {@Overridepublic void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {loginParent.setBackground(new BitmapDrawable(mActivity.getResources(), resource));}});可以有效的减少10mb的内存使用
2.png
优化后
3.png


Android App内存图片优化的方法:1、将Activity中的小图片和背景合并;2、不要在Activity的主题中为Activity设置默认的背景图片;3、对于在需要时才显示的图片或者布局,可以使用ViewStub标签。


php入门到就业线上直播课:进入学习Apipost = Postman + Swagger + Mock + Jmeter 超好用的API调试工具:

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也可以实现类似的效果):[tr=none]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15


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占用的内存翻倍;
3、对于在需要时才显示的图片或者布局,可以使用ViewStub标签,通过sdk/tools目录下的hierarchyviewer.bat查看布局文件会发现,使用viewstub标签的组件几乎不消耗布局的时间,在代码中当需要显示时再去实例化有助于提高Activity的布局效率和节省Activity消耗的内存。

注意:如果使用到WebView、视频播放、手写、动画等功能时,关掉硬件加速会严重音效程序的运行效率,这种情况可以只关闭掉Activity中某些view的硬件加速,整个Activity的硬件加速不关闭。
   如果Activity中某个View需要关闭硬件加速,但整个Activity不能关闭,可以调用view层级关闭硬件加速的方法:
[ 此帖被z3960在2022-11-17 07:35重新编辑 ]
关键词: bot 提供 视频 安卓
 
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
级别: 超级版主
发帖
835650
飞翔币
226827
威望
224673
飞扬币
2454463
信誉值
0

只看该作者 1 发表于: 2022-11-18
来看一下
级别: 超级版主
发帖
835650
飞翔币
226827
威望
224673
飞扬币
2454463
信誉值
0

只看该作者 2 发表于: 2022-11-18
不错,了解了