美文网首页
Android性能优化点

Android性能优化点

作者: 游侠_6fb7 | 来源:发表于2020-04-15 15:43 被阅读0次

    性能优化

    ANR

    主线程耗时5s
    前台service 20s,后台service 200s,IntentService除外
    前台广播10s,后台广播60s
    SharedPreferences anr
    使用sp读写配置文件,都是采用了官方的推荐做法,调用apply提交,调用这个方法时,会首先写入内存中,然后将落盘的任务加入队列中,会在异步线程中做落盘的操作,这个操作一般来说是没有问题的,也是google官方推荐的做法。但是另一方面android的系统会在Activity的onStop,onPause等生命周期中,调用QueuedWork.waitToFinish,等待落盘的任务队列执行完成,如果任务队列中的任务很多,或者待写入的数据量很大时(sp文件是全量读写的),在一些io性能差的中低端机型上就会很容易出现anr.
    检测ANR原理,如启动

    内存溢出

    图片采用三级缓存存储,内存,本地,网络
    fresco 采用四级缓存,解码后内存,解码前内存,本地,网络
    缩略图,对应尺寸

    内存抖动

    频繁GC导致内存抖动,造成卡顿,严重时导致OOM
    常见场景:
    循环创建大量临时对象,
    onDraw方法中创建Paint或者bitmap对象
    瞬间产生的大量对象占用新生代内存区域,导致内存空间不够,触发GC,系统花费在GC上的时间越多,进行界面绘制的时间就越短,

    内存泄露
    单例中持有activity的context;
     非静态内部类持有引用
     handler
     cursor未关闭
    

    解决方式
    applicationContext
    改为静态内部类,不持有当前类的引用
    静态内部类,weakReference引用,onDestory移除

    UI卡顿
    merge,减少节点,viewStub按需加载,include重用布局
     减少层级,层级相同用LinearLayout,RelativeLayout减少层级,weight measure两次,相对布局measure两次,减少过渡绘制
     能用padding,少用margin
    

    内存优化
    使用完后尽快释放掉,广播,service,用完尽快释放
    减少bitmap滥用,
    内存紧张时释放掉不必要资源
    减少依赖注入框架使用

    启动优化

    冷启动优化
    可放在线程池中,懒加载放在线程池中执行
    线程池中区分IO和cpu性能,开启多线程加载
    可靠后的,放在启动后初始化,减少不必要初始化
    减少布局层级深度
    可采用idleHandle方式执行
    inflate布局可放在onResume之后执行

    相关文章

      网友评论

          本文标题:Android性能优化点

          本文链接:https://www.haomeiwen.com/subject/bnbcvhtx.html