【LVGL v8.3】切换界面时内存变化分析

文章目录

前言

切换界面需要释放当前控件,否则控件一直存在,同时反复创建会导致内存泄漏

实现

数据结构

static struct
{
	lv_obj_t *screen;
	bool screen_del;
	lv_obj_t *screen_img_bg;
}ui;

创建界面

void setup_scr_ext(void)
{
	//Write codes screen
	ui.screen = lv_obj_create(NULL);
	lv_obj_set_size(ui.screen, 800, 480);
	lv_obj_set_scrollbar_mode(ui.screen, LV_SCROLLBAR_MODE_OFF);
	//Write codes screen_img_bg
	ui.screen_img_bg = lv_img_create(ui.screen);
	lv_obj_add_flag(ui.screen_img_bg, LV_OBJ_FLAG_CLICKABLE);
	lv_img_set_src(ui.screen_img_bg, &_02_alpha_800x480);
	lv_img_set_pivot(ui.screen_img_bg, 50,50);
	lv_img_set_angle(ui.screen_img_bg, 0);
	lv_obj_set_pos(ui.screen_img_bg, 0, 0);
	lv_obj_set_size(ui.screen_img_bg, 800, 480);
	lv_obj_add_flag(ui.screen_img_bg, LV_OBJ_FLAG_HIDDEN);

	//Write style for screen_img_bg, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT.
	lv_obj_set_style_img_opa(ui.screen_img_bg, 255, LV_PART_MAIN|LV_STATE_DEFAULT);

	//Update current screen layout.
	lv_obj_update_layout(ui.screen);
	lv_scr_load_anim(ui.screen, LV_SCR_LOAD_ANIM_NONE, 100, 100, true);
}

删除界面

void scr_ext_del(void)
{
    lv_obj_clean(ui.screen);
}

清空图片缓存

lv_img_cache_invalidate_src(NULL);

分析

原始内存

free
memheap           pool size  max used size available size
---------------- ---------- ------------- --------------
heap_cma         6291456    3090744       3200712
heap_sys         524472     39788         487048

创建界面

free
memheap           pool size  max used size available size
---------------- ---------- ------------- --------------
heap_cma         6291456    5754480       836560
heap_sys         524472     56972         480800

删除界面

free
memheap           pool size  max used size available size
---------------- ---------- ------------- --------------
heap_cma         6291456    5754480       836560
heap_sys         524472     56972         484736

释放缓存

free
memheap           pool size  max used size available size
---------------- ---------- ------------- --------------
heap_cma         6291456    5754480       3200712
heap_sys         524472     56972         486860

小结:主动释放缓存才会作用于 heap_cma;heap_sys 有损耗,需要检查

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

西西洛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值