HarmonyOS开发43:ListContainer加载原理和内存优化

首先打开日志,加一行调试信息,运行看一下
在这里插入图片描述
可以看到以下结果:
在这里插入图片描述
此处手机上显示了0-12,log里面显示调用了12+1次,也就是每次加载一个item就要调用一次getComponent,后面的一次是预加载

当item划出屏幕的时候,item就会被销毁,当再次划回来的时候,会再次调用getComponent方法

当item被销毁,布局对象会变成垃圾,会浪费内存

所以,我们要对ItemProvider.java文件进行优化

//返回item中要加载的布局对象
    //参数一:当前要加载哪一行item 0,1,2,......(item的索引)
    //参数二:表示要销毁的item的布局对象
    //参数三:优化,后面讲
    @Override
    public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
        DirectionalLayout dl;

        if (component != null) {
            dl = (DirectionalLayout) component;
        } else {
            //是独立的文件就写null,false
            //获取每一个item的布局对象
            dl = (DirectionalLayout) LayoutScatter.getInstance(as).parse(ResourceTable.Layout_itemview, null, false);
        }

        //获取每一个item里面的数据
        Item item = list.get(i);

        //把数据加载到布局里面的Text中
        Text text = (Text) dl.findComponentById(ResourceTable.Id_itemtext);
        text.setText(item.getText());

        //当上面的代码执行完毕之后,就获取到了一个有数据的布局对象
        //此时我们只要把布局对象dl返回就可以了
        //其实就是因为在Item中,最外层的就是dl布局
        return dl;
    }

结论:

  1. 加载一个item,就需要调用一次getComponent方法
  2. 虽然索引为13的item还没有被加载出来,但是ListContainer会预加载
  3. 当item划出屏幕的时候,item就会被销毁,当再次划回来的时候,会再次调用getComponent方法
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GeniusAng丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值