在页面开发中经常出现需要根据后端接口返回的数据来刷新页面的某个部分。在使用静态创建页面的方式时,可以通过监听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);
}