android onLayout死循环

本文探讨了在Android开发中onLayout方法内调用setLayoutParams可能导致的无限循环问题,并提供了避免此类性能陷阱的有效建议。

有时候,开发代码的时候,真的是因为你的无知,就导致了程序性能低下。

比如:

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        //解决分屏和手机低分辨率上面 显示异常 本地导入的取消全选和删除按钮重叠(附图)
        RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mTvAddBookShelf.getLayoutParams();
        layoutParams.width = APP.isInMultiWindowMode?Util.dipToPixel2(getContext(),80):Util.dipToPixel2(getContext(),120);
        if (DeviceInfor.DisplayWidth() <= 640 || APP.isInMultiWindowMode) {
            layoutParams.width = Util.dipToPixel2(getContext(),80);
        }else {
            layoutParams.width = Util.dipToPixel2(getContext(),100);
        }
        mTvAddBookShelf.setLayoutParams(layoutParams);
    }

你在onLayout里面调用了setLayoutParams方法,那么这个方法就会执行onLayout,然后又执行setLayoutParams,然后又执行onLayout.你可以打印日志,发现boolean changed 是false。但是这个方法一直在调用。

所以,以后在onlayout里面,禁止调用setLayoutParams方法。重新布局。总之一切会重新布局的方法,都不应该写在这里面。

转载于:https://www.cnblogs.com/caoxinyu/p/10568557.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值