087、LVGL基础控件:选项卡(Tabview)
LVGL基础控件:选项卡(Tabview)上周帮一个做智能家居面板的客户调试UI,遇到一个诡异的Bug——点击Tabview的某个标签页,整个界面卡死,但串口日志还在跑。排查了两天,最后发现是他在切换标签时,某个子页面里有个定时器没停,回调里访问了已经被删除的控件。这种问题在Tabview里太典型了,今天就把这个控件的用法和坑一次性说清楚。从一次死机事故说起客户的需求很简单:一个三页的Tabview,分别显示灯光控制、窗帘控制、场景模式。他按照LVGL官方示例写了代码,运行起来一切正常。但连续快速切换标签页三次以上,系统就挂了。我让他把lv_tabview_set_act()的调用加上延时,问题依旧。最后用lv_task的调试钩子才发现,灯光控制页里有个动画任务,在标签页被删除后还在跑,访问了已经被释放的lv_obj指针。这个案例告诉我们:Tabview的页面切换本质是创建和销毁子页面,所有关联的资源必须同步清理。Tabview的核心机制Tabview在LVGL里是个容器控件,它维护了一组标签按钮和对应的内容页面。每个标签页其实是一个独立的lv_obj对象,切换时LVGL会隐藏当前页面、显示目标页面,但默认情况下不会销毁非活动页面——除非你主动设置LV_TABVIEW_ANIM_NONE之外的动画模式。这里有个关