Android App 卡顿原因

01.Android卡顿原理

  • 通过对Android绘制机制的了解,我们知道造成应用卡顿的根源就在于16ms内不能完成绘制渲染合成过程,因为Android平台的硬件刷新率为60HZ,大概就是16ms刷新一次。如果没能在16ms内完成这个过程,就会使屏幕重复显示上一帧的内容,即造成了卡顿。在这16ms内,需要完成视图树的所有测量、布局、绘制渲染及合成。而我们的优化工作主要就是针对这个过程的。

02.复杂的视图树

阅读更多

Android APP 瘦身优化

1.APK组成

1.1 APK组成部分

  • 如下所示
    • res:包含未编译到的资源 resources.arsc,主要有图片资源文件;
    • classes.dex:包含以Dalvik / ART虚拟机可理解的DEX文件格式编译的类;
    • assets:包含应用可以使用AssetManager对象检索的应用资源;
阅读更多

Android 静态变量优化

01.为啥不要用静态变量保存核心数据

  • 尽量不使用静态变量保存核心数据。这是为什么呢?
    • 这是因为android的进程并不是安全的,包括application对象以及静态变量在内的进程级别变量并不会一直呆着内存里面,因为它很有会被kill掉。
    • 当被kill掉之后,实际上app不会重新开始启动。Android系统会创建一个新的Application对象,然后启动上次用户离开时的activity以造成这个app从来没有被kill掉的假象。而这时候静态变量等数据由于进程已经被杀死而被初始化,所以就有了不推荐在静态变量(包括Application中保存全局数据静态数据)的观点。
阅读更多

Android 图片优化

01.bitmap优化

  • 加载图片所占的内存大小计算方式
    • 加载网络图片:bitmap内存大小 = 图片长度 x 图片宽度 x 单位像素占用的字节数【看到网上很多都是这样写的,但是不全面】
    • 加载本地图片:bitmap内存大小 = width * height * nTargetDensity/inDensity 一个像素所占的内存。注意不要忽略了一个影响项:Density
  • 第一种加载图片优化处理:压缩图片
阅读更多

Android App 启动页优化

01.存在白屏问题

1.1 问题描述

  • 出现问题描述
    • android app启动页面黑屏的问题,android开发app启动时若没有做特殊处理的话,会出现一瞬间的白屏现象。
    • 即使你启动页界面就加载一个布局,不做其他耗时处理,貌似也会出现一瞬间的白屏问题。注意,有些地方也称黑屏,主要是看你给app设置的style样式。
阅读更多

Android App 线程优化

01.创建Thread弊端

  • 直接创建Thread实现runnable方法的弊端
    • 大量的线程的创建和销毁很容易导致GC频繁的执行,从而发生内存抖动现象,而发生了内存抖动,对于移动端来说,最大的影响就是造成界面卡顿
    • 线程的创建和销毁都需要时间,当有大量的线程创建和销毁时,那么这些时间的消耗则比较明显,将导致性能上的缺失

02.为何要用线程池

阅读更多

Android 代码优化

01.代码优化有哪些

  • 都是一些微优化,在性能方面看不出有什么显著的提升的。使用合适的算法和数据结构是优化程序性能的最主要手段。

02.lint检查去除无效代码

  • lint去除无效资源和代码
    • 如何检测哪些图片未被使用
      • 点击菜单栏 Analyze -> Run Inspection by Name -> unused resources -> Moudule ‘app’ -> OK,这样会搜出来哪些未被使用到未使用到xml和图片,如下:
阅读更多

Android 懒加载优化

1.什么是懒加载

  • 1.1 什么是预加载

    • ViewPager+Fragment的搭配在日常开发中也比较常见,可用于切换展示不同类别的页面,我们日常所见的咨询、购物、金融、社交等类型的APP都有机会用到这种控件组合
    • ViewPager控件有个特有的预加载机制,即默认情况下当前页面左右两侧的1个页面会被加载,以方便用户滑动切换到相邻的界面时,可以更加顺畅的显示出来。
    • 通过ViewPager的setOffscreenPageLimit(int limit)可以设置预加载页面数量,当前页面相邻的limit个页面会被预加载进内存
阅读更多

Android 布局优化

01.常见布局优化方法

  • 布局优化的核心就是尽量减少布局文件的层级,常见的方式有:
    • 多嵌套情况下可使用RelativeLayout减少嵌套。
    • 布局层级相同的情况下使用LinearLayout,它比RelativeLayout更高效。
    • 使用标签重用布局、标签减少层级、标签懒加载。
    • 当有多个组件有相似的属性时,可以使用styles,复用样式定义;
    • 通过定义drawable来替代图片资源的使用,降低内存消耗;
阅读更多

Android 网络优化

01.图片分类优化

  • 图片网络优化
    • 比如我之前看到豆瓣接口,提供一种加载图片方式特别好。接口返回图片的数据有三种,一种是高清大图,一种是正常图片,一种是缩略小图。当用户处于wifi下给控件设置高清大图,当4g或者3g模式下加载正常图片,当弱网条件下加载缩略图【也称与加载图】。
    • 简单来说根据用户的当前的网络质量来判断下载什么质量的图片(电商用的比较多)。豆瓣开源接口可以参考一下!

02.获取网络数据优化

阅读更多