7.图片优化7.1 bitmap优化
加载图片所占的内存大小计算方式加载网络图片:bitmap内存大小 = 图片长度 x 图片宽度 x 单位像素占用的字节数【看到网上很多都是这样写的 , 但是不全面】加载本地图片:bitmap内存大小 = width * height * nTargetDensity/inDensity 一个像素所占的内存 。注意不要忽略了一个影响项:Density第一种加载图片优化处理:压缩图片质量压缩方法:在保持像素的前提下改变图片的位深及透明度等 , 来达到压缩图片的目的 , 这样适合去传递二进制的图片数据 , 比如分享图片 , 要传入二进制数据过去 , 限制500kb之内 。采样率压缩方法:设置inSampleSize的值(int类型)后 , 假如设为n , 则宽和高都为原来的1/n , 宽高都减少 , 内存降低 。缩放法压缩:Android中使用Matrix对图像进行缩放、旋转、平移、斜切等变换的 。功能十分强大!第二种加载图片优化:不压缩加载高清图片如何做?使用BitmapRegionDecoder , 主要用于显示图片的某一块矩形区域 , 如果你需要显示某个图片的指定区域 , 那么这个类非常合适 。
7.2 glide加载优化
在画廊中加载大图假如你滑动特别快 , glide加载优化就显得非常重要呢 , 具体优化方法如下所示
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE) { LoggerUtils.e("initRecyclerView"+ "恢复Glide加载图片"); Glide.with(ImageBrowseActivity.this).resumeRequests(); }else { LoggerUtils.e("initRecyclerView"+"禁止Glide加载图片"); Glide.with(ImageBrowseActivity.this).pauseRequests(); } }});8.加载优化8.1 懒加载优化
该优化在新闻类app中十分常见ViewPager+Fragment的搭配在日常开发中也比较常见 , 可用于切换展示不同类别的页面 。懒加载,其实也就是延迟加载,就是等到该页面的UI展示给用户时,再加载该页面的数据(从网络、数据库等),而不是依靠ViewPager预加载机制提前加载两三个 , 甚至更多页面的数据 。这样可以提高所属Activity的初始化速度,也可以为用户节省流量.而这种懒加载的方式也已经/正在被诸多APP所采用 。
8.2 启动页优化
启动时间分析系统创建进程的时间和应用进程启动的时间 , 前者是由系统自行完成的 , 一般都会很快 , 我们也干预不了 , 我觉得能做的就是去优化应用进程启动 , 具体说来就是从发Application的onCreate()执行开始到MainActivity的onCreate()执行结束这一段时间 。启动时间优化延迟初始化后台任务启动界面预加载Application的onCreate()方法MainActivity的onCreate()方法优化的手段也无非三种 , 如下所示:启动页白屏优化常见有三种 , 这里解决办法是给当前启动页添加一个有背景的style样式 , 然后SplashActivity引用当前theme主题 , 注意在该页面将window的背景图设置为空!更多关于启动页为什么白屏闪屏 , 以及不同解决办法 , 可以看我这篇博客:App启动页面优化当系统启动一个APP时 , zygote进程会首先创建一个新的进程去运行这个APP , 但是进程的创建是需要时间的 , 在创建完成之前 , 界面是呈现假死状态 , 于是系统根据你的manifest文件设置的主题颜色的不同来展示一个白屏或者黑屏 。而这个黑(白)屏正式的称呼应该是Preview Window , 即预览窗口 。实际上就是是activity默认的主题中的android:windowBackground为白色或者黑色导致的 。总结来说启动顺序就是:app启动——Preview Window(也称为预览窗口)——启动页为什么存在这个问题?解决办法启动时间优化现在application初始化内容有:阿里云推送初始化 , 腾讯bugly初始化 , im初始化 , 神策初始化 , 内存泄漏工具初始化 , 头条适配方案初始化 , 阿里云热修复……等等 。将部分逻辑放到IntentService中处理 , 可以缩短很多时间 。开启IntentSerVice线程 , 将部分逻辑和耗时的初始化操作放到这里处理 , 可以减少application初始化时间关于IntentService使用和源码分析 , 性能分析等可以参考博客:IntentService源码分析IntentService子线程分担部分初始化工作
推荐阅读
- 探索 Android 内存优化方法
- MySQL:常用的30种SQL查询语句优化方法
- 2019年seo动态网页优化“指南针”
- 微信小程序页面传值、组件间通信总结
- 资深架构师总结:彻底搞懂NIO效率高的原理
- 老司机总结雨刮器功能,除了刮玻璃,还有这4个,你知道几个?
- SEO优化和SEM对比的优势体现
- 中继器、集线器、网桥、交换机、路由器、网关的超全总结
- 网友总结户外知识:疲劳防护和体能恢复
- 各种排序算法总结
