性能优化

本文探讨了安卓应用中常见的卡顿场景及其原因,并介绍了多种优化手段,包括布局优化、内存优化等,以提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:卡顿的场景

1、UI绘制2、应用启动3、页面跳转4、事件响应


根本原因有两大类:

1界面绘制:层级深,页面复杂,刷新不合理

2数据处理:导致这种卡顿的原因是数据处理量太大,分为三种情况,一是数据处理在UI线程(这种应该避免),二是数据处理占用CPU高,导致主线程拿不到时间片,三是内存增加导致频繁GC,从而引起卡顿。


卡顿检测工具:TraceView检测由数据方面引起的卡顿

手机开发者选项,GPU渲染大概确定页面是否存在卡顿现象,再用Android Lint工具全局扫描工程,找出需要优化的布局,最后用HierarchyView详细检查布局存在的问题。


布局优化:

1、尽量使用RelativeLayout和LinearLayout,在布局层级相同的情况下,尽量使用LinearLayout,因为RelativeLaout会进行两次测量,不如LinearLayout快,用LinearLayout有时候会使布局层级太深,应该尽量使用RelativeLayout。

2、将可复用的组件抽取出来并通过<Include>标签使用

3、使用<ViewStud>标签加载一些不常用的布局

4、使用<merge>标签减少布局的嵌套层次

5、尽可能使用warp_content,warp_content会增加布局mearsure的计算成本,

6、删除控件中的无用属性

注意:

  • <merge />只可以作为xml layout的根节点。
  • 当需要扩充的xml layout本身是由merge作为根节点的话,需要将被导入的xml layout置于 viewGroup中,同时需要设置attachToRoot为True。


内存优化

一、内存检测工具 Memory Monitor,Heap Viewer,Allocation Tracker, Memory Analyze Tool(MAT)。


内存泄露的场景:1、资源性对象为关闭,如I/O流,cursor等。

                            2、注册对象未注销;

                            3、类的静态变量持有大数据对象

                            4、非静态内部类的静态实例 解决方案:将非静态内部类改为静态内部类,如果使用Context则尽量使用ApplicationContext;

                            5、Handler临时性内存泄露 解决方案:使用静态Handler内部类,然后对handler持有的对象使用弱引用,在Activity销毁时,移除消息队列中的消息。

private static class NewHandler extends Handler{

    private WeakReference<Context> mContext = null;

    public NewHandler(Context ctx){
        mContext = new WeakReference<Context>(ctx);
    }
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
    }
}

                          6、容器中的对象没有清理造成内存泄漏


内存泄漏监控  LeakCanary



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值