android艺术开发探索之性能优化

android艺术开发探索之性能优化

最近看这本书,本人习惯性看完书后划横线划重点,这得归功于在大学的时候,我读了自考,当时的概念就是给你一本书,你的考及格,有个老师上课专门给你讲重点,划线,下课后背,查,因此就养成了这种习惯,就这么样了,不扯淡了,下面继续,以下是知识点:

  • 布局优化
  • 绘制优化
  • 内存泄漏优化(单例导致)
  • ANR

布局优化

  • 删除布局中无用的控件和层级,减少嵌套,在达到目的的情况下减少控件和层级.
    -
  • 有选择性的使用性能较低的viewgroup,FrameLayout和Linearlayout的性能比RelativeLayout的性能好,但是当需要嵌套对个linearlayout才能实现一个relativelayout的布局时就选择relativelayout,需要嵌套还不如relativelayout.
    -
  • 采用include标签达到布局重用,merge标签用来减少布局层级,viewstub用来按需加载布局(比如:无网是一个布局,有网又是另外一个布局).

    include标签重点:

    include只支持android_layout开头的和android:id属性,其他不支持,include里面的id优先级大于它包含的内容的优先级,也就是相同的id以include的android:id为基准。

    设置include的宽高属性时必须同时存在,否则其他的android:layout_*属性无法生效

    merge标签重点:

    当前布局根布局是某控件(如linearlayout),当前布局的include包含的布局的根布局也是某控件,则把当前布局包含的include所对应的布局的根布局换成merge标签减少层级。

    viewStub标签重点:

    viewstub用于一个activity中有多个布局的时候,比如有网的时候显示一个布局,没网的时候又显示另外一个布局等,这个时候用viewstub来优化,用法和include相似:

  <ViewStub
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/自己的id"
        android:inflatedId="@+id/刚开始隐藏的布局的根元素的id"
        android:layout="@layout/隐藏布局的文件名"
        />

当它要显示的时候直接findbyid并且setvisible就好了。

绘制优化

  • View的onDraw方法不要执行大量操作(不要创建新的局部对象,占内存)
  • View的onDraw方法不要执行耗时操作,也不要执行成千上万的循环(循环抢占cpu时间片,绘制卡顿)

内存泄漏(可使用Mat工具检测)

  • 把context设置成静态的activity将无法销毁,context引用了this–>activity
  • 吧view设置成静态的,new view(this)时会将actiivty无法释放因为view静态并持有它。
  • activity的对象被单列模式的某某所持有时。单例模式的生命周期和application一致,会导致activity无法被及时释放
  • 无线循环的属性动画如果未在Ondestroy中掉animator.cancle去停止,该动画会一直播放,view持有了动画和activity,最终activity无法释放

线程优化

  • 采用线程池,避免大量的thread.

图片优化

  • 通过 BitmapFactory.Options采样压缩.

优化建议

  • 避免创造更多的对象、
  • 不要过多使用枚举,占空间比整形大
  • 常量使用static final修饰
  • 使用android特有的SparseArray和Pair等他们有较好的性能
  • 适当使用软引用和弱引用
  • 采用内存缓存和磁盘缓存
  • 尽量采用静态内部类,这样可以避免潜在由于内部类而导致的内存泄漏

ANR

在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)。 —— [百度百科 ]

actiivty5秒内无反应和boardcastreceiver10秒内未执行会出现anr,当发生anr的时候去系统/data/anr目录下找traces.txt查看分析异常。


爱分享爱开发的宝宝们可以加入群:234456543

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值