图片优化(效果最明显)

  • 过度图片的回收

 原因分析:

在做冷启动时候,很多人写一个如下

    <style name="MainTheme" parent="@android:style/Theme.Wallpaper.NoTitleBar"><item name="android:windowNoTitle">true</item><item name="android:windowTranslucentStatus">true</item><item name="android:windowTranslucentNavigation">true</item><item name="android:windowIsTranslucent">true</item><item name="android:windowBackground">@mipmap/ic_bg</item></style>

这里使用 android:windowBackground 设置了一个全局的背景图片,如果不回收,会一直暂用很大的内存

我们可以使用 dumpsys meminfo 包名 | grep TOTAL: 查看该应用使用android:windowBackground的大小

t7-p1-s201-aw18:/ # dumpsys meminfo 包名|grep TOTAL:
^[[A               TOTAL:    27921       TOTAL SWAP PSS:        0

我们在看一下没有使用了android:windowBackground应用占用的内存

t7-p1-s201-aw18:/ # dumpsys meminfo 包名|grep TOTAL:TOTAL:    22924       TOTAL SWAP PSS:        0

我们可以看一下,相差了将近5M的内存差,如果不回收,这5M是一直都存在的

其实这图片在PC上面图片只有624KB,为啥会占用这么大的内存,有兴趣的可以参考【android学习】APP图片内存计算

优化方式:

在onCreate方法里面,将window的windowBackground设置为null,这样就可以等待系统回收

    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.aa_activity_main);getWindow().setBackgroundDrawable(null);
}

因为每次run之后,内存大小会有所改变,但是大体的还是可以看出来,再来对比一下

t7-p1-s201-aw18:/ # dumpsys meminfo 包名|grep TOTAL:TOTAL:    23365       TOTAL SWAP PSS:        0
  • 资源目录结构调整

 原因分析:

图片资源一般会存放在mipmap-hdpi,mipmap-mdpi,mipmap-xhdpi,mipmap-xxhdpi,mipmap-xxxhdpi这些目录里面,有些为了适配不同手机机型,会将不同尺寸的图片放在相应的目录里面

drawable文件尺寸与pc中文件尺寸关系

目录 屏幕密度
mipmap-ldpi 120dpi
mipmap-mdpi 160dpi
mipmap-hdpi 240dpi
mipmap-xhdpi 320dpi
mipmap-xxhdpi 480dpi

按照不同的适配机型的屏幕密度,分别读取不同文件目录

可以通过如下指令查看你的车机的屏幕密度:

C:\Users\Administrator>adb shell wm density
Physical density: 240

因为我的车机屏幕密度是240,所以我将背景图片放在了mipmap-hdpi,同时设置布局文件的背景android:background="@mipmap/ic_bg"

我们看一下内存:

t7-p1-s201-aw18:/ # dumpsys meminfo 包名|grep TOTAL:TOTAL:    16348       TOTAL SWAP PSS:        0

然后我们将同一张图片移动到mipmap-xxxhdpi,看一下内存:

t7-p1-s201-aw18:/ # dumpsys meminfo 包名|grep TOTAL:TOTAL:    12464       TOTAL SWAP PSS:        0

可以看到同一张图片,存放不同目录,占用的内存不一样

优化方式:

在图片不失真的前提下,将大图移动到高分辨率的目录里面,会降低图片占用内存

  • 图片显示优化

 原因分析:

我们使用一个ImageView

    <ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:src="@mipmap/ic_bg"android:visibility="gone"/>

分别将该ImageView设置为android:visibility="visible",占用内存如下

t7-p1-s201-aw18:/ # dumpsys meminfo 包名|grep TOTAL:TOTAL:    16626       TOTAL SWAP PSS:        0

将该ImageView设置为android:visibility="gone",占用内存如下

t7-p1-s201-aw18:/ # dumpsys meminfo com.iflytek.autofly.meminfotest|grep TOTAL:TOTAL:    16586       TOTAL SWAP PSS:        0

可以看到设置为gone依然会占用内存

优化方式:

一些没有使用的布局,直接删除,不要设置为gone

  • 自定义背景drawable代替图片背景图

这个很好理解,

  1. 比如一张纯色的图片,你完全可以使用shape来实现。
  2. 一些复杂的图片,如果能用SVG实现,就使用SVG
  • 帧动画图片清理及相关帧率优化

在做播放动画效果时候,一般会使用帧动画

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"><itemandroid:drawable="@mipmap/ic_music_playing_anim1"android:duration="200" /><itemandroid:drawable="@mipmap/ic_music_playing_anim2"android:duration="200" /><itemandroid:drawable="@mipmap/ic_music_playing_anim3"android:duration="200" />
</animation-list>

因为动画会将所有图片加入到内存,所以在不影响动画效果的条件下,可以删掉部分动画图片,达到减少内存目的

  • 图片缩放

不同的图片格式占用的内存大小不同:

  1. ALPHA_8:每个像素占用1byte内存
  2. ARGB_4444:每个像素占用2byte内存
  3. ARGB_8888:每个像素占用4byte内存 (默认)
  4. RGB_565:每个像素占用2byte内存

在加载图片时候,颜色模式为ARGB_8888,在不影响图片效果前提下,可以将图片做一定压缩,转换图片格式

     public static Bitmap decodeBitmap(Contextcontext, intresId) {BitmapFactory.Optionsopt = newBitmapFactory.Options();opt.inPreferredConfig = Bitmap.Config.RGB_565;opt.inPurgeable = true;opt.inInputShareable = true;InputStreamis = context.getResources().openRawResource(resId);returnBitmapFactory.decodeStream(is, null, opt);}

资源优化(效果明显)

  • 无用资源清理:jar包,Library包

当项目达到一定规模以后,就会存在一些没有使用的jar包,可以删除达到减少内存占用

  • so文件的删除

手机为了适配不同手机机型,会存放很多版本的so文件,手机可以根据不同手机,分渠道打包,因为我做的事车机,所以,就直接干掉没有使用的类型了

  1. armeabi
  2. armeabi-v7a
  3. arm64-v8a
  4. x86
  5. x86_64
  6. mips
  7. mips64
  • 删掉没有使用的布局文件

可以使用lint工具,具体参考:Android 性能优化:使用 Lint 优化代码、去除多余资源

代码优化(见效很慢,是一个漫长的过程)

这里不具体描述:

  1. 清除不必要的对象应用
  2. 避免循环中创建大量对象导致内存抖动
  3. listview recycleview 类布局及图片等优化
  4. 内存泄漏排查优化

【android学习】记录应用内存优化相关推荐

  1. 深度学习框架的内存优化机制

    深度学习框架的内存优化机制 https://www.cnblogs.com/DicksonJYL/p/9576896.html 这篇博文简单介绍下深度学习框架的内存优化方式,主要参考资料1,也就是MX ...

  2. Android 学习记录(持续更新)

    Android 学习记录(持续更新) 1.AndroidManifest.xml 详解: http://www.jb51.net/article/73731.htm (AndroidManifest. ...

  3. Android学习记录(一)

    文章目录 Android学习记录(1) 1.Android的相关介绍 1.1Android是什么 1.2使用工具(Android Studio) 1.3Android应用目录结构 2.Android案 ...

  4. Android学习记录

    从今天开始呢我就要每隔一段时间就记录自己学习Android的状况.现在还处于java基础的学习中,所以并未有什么特别的问题或注意要提醒大家,那么今天就来聊聊我的Android之路吧. 其实智能机出现之 ...

  5. Android之——性能与内存优化

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46987951 写出高效代码的两条基本的原则:(1)不要做不必要的事:(2)不要分配 ...

  6. android 学习记录-----------android 活动 意图 碎片

    将此篇博客作为记录android项目开发过程中的学习记录 转载于:https://www.cnblogs.com/yukino/p/4071002.html

  7. Android之Bitmap的内存优化方案总结

    在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常.所以,对于图 ...

  8. Android对Bitmap的内存优化

    一 .简要 在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常. ...

  9. android 开发如何做内存优化

    不少人认为JAVA程序,因为有垃圾回收机制,应该没有内存泄露.其实如果我 们一个程序中,已经不再使用某个对象,但是因为仍然有引用指向它,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用,这就造 ...

最新文章

  1. C语言实现bmp图像几何变换(移动,旋转,镜像,转置,缩放)
  2. MySQL删除普通用户
  3. php实现复选框删除功能,php怎么实现复选框批量删除
  4. c语言程序设计章节作业网上,C语言程序设计第17章在线测试
  5. 根据子树样本数对cart树剪枝与剪枝前后图形绘制
  6. Redis 中 Lua 脚本的应用和实践
  7. 7-10 任务调度的合理性 (8 分)
  8. 算法高级(1)-概述
  9. AutoResetEvent类的使用
  10. 基于极限学习机的自编码器(ELM-AE)
  11. android位置模拟源码,android 模拟定位app 源码
  12. 计算机播放qq音乐没声音怎么办,电脑突然没声音了.开启QQ音乐说要检查音效卡驱动程式设定是否正常....
  13. js替换url指定参数的值
  14. Excel常用函数——count
  15. 谈谈WebService开发-基础篇
  16. 网站微信扫码授权登录
  17. 关于 Shell 脚本的经典十三问
  18. 程序员玩‘附近的人’,妹子还没泡,先学会了个专业技能!
  19. 2007-2020年上市公司研发投入匹配数字化转型
  20. 上大学的四年---以此结束四年的时光

热门文章

  1. 【 malcolmcrum】基于Java后端与Typescript前端的代码自动生成
  2. 【学习打卡 Free-Excel 】Task9 数据透视
  3. PDF如何插入空白页面,来教你试试这种方法
  4. 解决 rsync: failed to connect to xxx.xxx.xxx.85 (xxx.xxx.xxx.85): No route to host (113) 问题
  5. 苹果电脑macos Monterey 12.5(21G72)dmg原版引导版镜像下载
  6. Word如何拆分单元格
  7. Java匿名内部类的用法(简单教学)
  8. 苹果怎么设置下载软件不要密码?手机技巧分享
  9. 《培根随笔》读书笔记 (一)
  10. html 多张图片自动滚动,JS实现图片的不间断连续滚动的简单实例