lvgl 单个页面使用定时轮询接口数据

在页面开发中经常出现需要根据后端接口返回的数据来刷新页面的某个部分。在使用静态创建页面的方式时,可以通过监听lvgl 页面生命周期函数来实现,避免整个页面重复绘制,导致体验不好。

而通过每个页面创建定时器的方式,也避免了通过创建全局的定时任务的方式,导致当前不在这个页面还会一直轮询该页面的接口的问题。

其效果如下:

每次切换页面后定时器会被销毁,重新进入页面定时器才会被创建,这样就可以实现当个页面的刷新,不会导致资源的浪费。

源码如下:

lv_timer_t * dataTimer;
lv_obj_t * dataLabel;
void my_timer () // 定时器回调函数
{
    lv_label_set_text(dataLabel, "btn");
    printf("dd\n");
}
void init (lv_event_t * e) // 页面生命周期监听函数
{
    lv_event_code_t code = lv_event_get_code(e);
    if (code == LV_EVENT_SCREEN_LOAD_START)
    {
        dataTimer = lv_timer_create(my_timer, 1500, NULL);
    } else if (code == LV_EVENT_SCREEN_UNLOAD_START)
    {
        if (dataTimer) lv_timer_del(dataTimer);
    }
}

// 页面静态代码
void page_init(void)
{
    ui_page = lv_obj_create(NULL);
    lv_obj_remove_style_all(ui_page);
    lv_obj_set_size(ui_page, lv_pct(100), lv_pct(100));
    lv_obj_set_style_bg_color(ui_page, lv_color_hex(0x000000), LV_PART_MAIN);
    lv_obj_set_style_bg_opa(ui_page, 255, LV_PART_MAIN);
    lv_obj_add_event_cb(ui_page, init, LV_EVENT_ALL, NULL);

    lv_obj_t* ui_main = lv_obj_create(ui_page);
    lv_obj_remove_style_all(ui_main);
    lv_obj_set_size(ui_main, 400, 400);
    lv_obj_set_style_bg_color(ui_main, lv_color_hex(0xdc7878), LV_PART_MAIN);
    lv_obj_set_style_bg_opa(ui_main, 255, LV_PART_MAIN);
    lv_obj_set_style_radius(ui_main, 12, LV_PART_MAIN);
    lv_obj_set_y(ui_main, 76);
    lv_obj_center(ui_main);

    lv_obj_t * btn1 = lv_btn_create(ui_main);
    lv_obj_center(btn1);
    lv_obj_add_event_cb(btn1, changePage, LV_EVENT_ALL, NULL);

    dataLabel = lv_label_create(btn1);
    lv_label_set_text(dataLabel, "button2");
    lv_obj_center(dataLabel);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值