Android系统-性能-优化概述

目录

引言:

APP优化:

网络优化:

内存优化:

卡顿优化:


引言:

先大概对Android性能优化做一个简单分类和梳理。由于性能影响因素多,比如本文分类的APP,内存,网络,卡顿都是互相影响的。卡顿应该是用户最直观可见的性能问题了。

APP优化侧重于启动,UI绘制以及资源优化这三个方面考虑

内存优化侧重于内存抖动,内存泄露,扩大内存方面考虑

网络优化则是从网络请求,数据压缩的方面考虑

上面这三个方面的优化就有利于我们系统卡顿问题的解决。刚才说的卡顿是用户直观感知的,从显示的角度看卡顿问题的话就是丢帧掉帧引起的。本篇暂时不展开与显示刷新原理方面的内容说明。


APP优化:

    UI优化(布局优化,绘制优化)
        布局优化:RelativeLayout替代LinearLayout,作为默认根布局。降低嵌套布局,提高渲染效率
        <include>标签
        <ViewStub>标签加载不常用的布局,延迟加载
        <merge>标签减少布局的嵌套层次
    安装包优化(res资源文件优化)
        减小体积
        res资源优化
        代码优化:
        lib资源优化:
        assets资源优化
        代码混淆
        使用proGuard代码混淆工具,包括压缩,优化,混淆等功能
        插件化:功能模块放入服务器,需要时再加载
    启动优化:

        冷启动,热启动,耗时线程用子线程去执行

        启动逻辑,加载逻辑;
        非必要的对象可以延迟初始化;
        不要创建全局静态对象,而是转向单例模式,这样应用进程只需要第一次时初始化
        考虑依赖注入框架
        

网络优化:

    合并网络请求,减少网络请求
    避免DNS解析
    大量的数据加载采用分页的方式
    网络数据采用GZIP压缩
    加入网络数据缓存,避免频繁请求网络
    上传图片时,在必要的时候压缩图片
    

内存优化:

    避免内存泄露:长生命周期的对象引用了短生命周期的对象。堆上分配的对象已经不再使用了,但是GC收集器无法对其进行回收。
    静态变量问题:将内部类设为静态内部类或独立出来使用context.applicationContext()
    单例模式:传参context.getApplicationconText()
    属性动画:Activity.onDestroy调用Animation.cancel()
    Handler:使用静态内部类+WeakReference弱引用;当内部类结束生命周期时清空消息队列
    线程问题:将AsyncTask和Runnable设为静态内部类或独立出来,在线程内部采用弱引用保存Context引用
    资源未关闭:在Activity销毁时即使关闭或者注销:
        BroadcastReceiver调用unregisterReceiver()
        Cursor,Stream,file:调用close
    Adapter问题:
        不使用缓存而只依靠getView()每次重新实例化Item,会给GC制造压力
        在构造Adapter时使用convertView
    WebView问题:webView和Activity在同一线程
    集合问题:map等有静态引用,没有做删除操作
    扩大内存:清单文件中Application添加 largeHeap=“true”属性;同一个应用开启多个进程来运行,这样可以增大应用的总内存空间        


卡顿优化:

    不要在主线程进行网络访问或者大文件IO操作
    优化布局
    优化绘制:避免不必要的重绘以及过度绘制
        onDraw不要创建新的局部对象。
        onDraw方法不要做耗时操作
 


 

猜你喜欢

转载自blog.csdn.net/haigand/article/details/132506650