SiFli Solution Documents SiFli Solution Documents SiFli Solution Documents
/
  • English
  • 中文
  • SiFli Solution介绍
  • 快速入门
    • 开发环境配置
    • 运行第一个项目
    • PC仿真环境
    • Solution目录结构
    • 方案选型
    • 线程及线程消息通信
    • 内存管理
    • 字体
    • 图片资源
    • 多语言支持
    • FLASH分配
    • IPC(核间)通信
    • FlashDB 与 NVM 存储方案
    • MONKEY测试
  • 应用笔记
    • UI/应用
      • 总览
      • 应用APP
      • 平铺(TLV)
      • 表盘(WF)
      • 弹窗(POPUP)
      • 息屏显示(AOD)
      • 场景动画
      • 设置APP
      • 主菜单APP
      • 按键处理
      • 数据刷新
      • 多张图片打包机制
      • 资源目录结构
      • 创建一个新APP
      • 删除外置APP
      • 设置默认APP
      • SENSOR数据对接
      • 帧率
    • BLE/BT
      • BLE
      • BT
    • 驱动
      • I2C
      • PWM
      • UART
      • SPI
    • FLASH分区
    • 文件系统
      • FAT
      • LittleFS
    • eMMC
    • USB
    • SDIO Wi-Fi
    • 外围设备
      • Sensor应用指南
        • 运动传感器移植指南
        • 心率传感器移植指南
        • 地磁传感器移植指南
        • 光感传感器移植指南
        • 传感器数据融合
      • Sensor消息处理
        • 应用与Sensor通信
    • 低功耗
    • 电池管理
      • 概述
      • 入门
      • 进阶
    • 新工程创建
    • OTA升级
      • OTA(固件端)
      • OTA(手机SDK)
        • 总览
        • OTA V3 iOS SDK
        • OTA V3 android SDK
        • OTA V3 harmony SDK
        • OTA V3 错误码
      • OTA升级(http)
    • QuickJS
    • GUI工具
      • GUI_Builder固件
        • OTA说明
        • 表盘编辑
        • 数据对接
        • 事件对接
        • 调试
        • 控制命令
      • 3rd GUI_Tool
        • NXP Gui Guider
          • 1. 介绍
          • 2. 安装与使用
          • 3. 生成的代码如何接入Solution
        • SquareLine
          • 1. 介绍
          • 2. 安装与使用
          • 3. 生成的代码如何接入Solution
    • RF测试
    • 烧录相关
    • eZIP工具
    • 死机分析
  • 组件说明
    • UI控件使用指南
    • USB MStorage指南
    • BUTTON指南
    • alipay指南
    • 动态应用指南
    • 开关机过程
    • 睡眠唤醒过程
    • 睡眠唤醒过程梳理
  • API接口
    • SERVICE_COMM
    • APP_COMM
    • APP_MEM
    • APP_THREAD
    • APP_PM
    • APP_LANG
    • APP_FLASHDB
    • BATTERY_COMM
    • BUTTON_SERVICE
    • IPC_SERVICE
    • LCPU_THREAD
    • PMIC_SERVICE
  • 示例
  • 工具
  • FAQ
    • 概述
    • 开发环境
    • 编译相关
    • 工程
    • menuconfig
    • 应用
    • LCD
    • Audio
    • 蓝牙(BLE/BT)
    • 外部存储器
    • 文件系统
    • 图片资源
    • 字体
    • 驱动
      • SF30147
      • Gpio
      • I2C
      • I2S
      • UART
      • SPI
      • PWM
      • ADC
      • Flash
      • LCDC
      • Timer
    • GUI Builder工具
    • 低功耗
    • 多语言
    • OTA
      • 固件端
      • 手机端
    • 外围设备
      • Sensor
    • USB
    • 工具
      • Butterfli
      • Impeller
      • SiFli_Trace
      • AssertDump
      • LightWork
      • FsrwTool
      • GraphicsTool
      • ImgStamp
      • SiFli_EQ
      • SiFli_RfTool
      • UsartServer
      • BurnDriverEx
    • 手机APP
    • 打库(lib)
    • 产线生产
      • 烧录下载
      • 固件外发烧录
      • eFuse 使用
      • 48M 晶体校准
      • RF测试
    • WIFI
    • 4G(LTE)
    • 认证
    • 调试
    • 死机
  • SiFli GUI Builder
    • GUI_Builder固件
      • OTA说明
      • 表盘编辑
      • 数据对接
      • 事件对接
      • 调试
      • 控制命令
    • GUI builder工具
      • 概述
      • 安装SifliGUIBuilder
      • 基本功能
      • 控件说明
        • 背景
        • 文本
        • 按键
        • 图片
        • 图组
        • 指针
        • 进度条
        • 滚轮
        • 滚动视图
        • 计时器
        • 序列帧
        • GIF
        • 组件
        • 容器
        • 图表
        • 网格视图
        • 键盘
        • 文本区域
        • 条形码
        • 二维码
      • 数据源
      • 事件-行为
      • 多语言
      • 创建表盘
      • 创建应用
      • 串口屏
      • 模拟器仿真
      • 串口调试
      • 生成&发布
  • 手机SDK
    • OTA(手机SDK)
      • 总览
      • OTA V3 iOS SDK
      • OTA V3 android SDK
      • OTA V3 harmony SDK
      • OTA V3 错误码
    • 表盘/应用传输
    • 背景图传输
    • eZIP转换
      • eZIPSDK For android
      • eZIPSDK For iOS
      • eZIPSDK For Harmony
  • 开源社区专题
    • 支持板级介绍
    • Solution版本介绍
    • SiFli_demo_app 教程
  • 视频教学
  • Solution版本说明

该页内容

  • 1. 内置弹窗
    • 1.1 注册
      • 1.1.1 注册接口
      • 1.1.2. 弹窗消息类型说明
      • 1.1.3 调度接口
    • 1.2 示例
  • 2. 外置弹窗
    • 2.1 注册
    • 2.2 示例
  1. SiFli Solution Documents /
  2. 应用笔记 /
  3. UI/应用 /
  4. 弹窗(POPUP)

弹窗(POPUP)¶

1. 内置弹窗¶

1.1 注册¶

1.1.1 注册接口¶

注册弹窗调用以下接口即可

    POPUP_REGISTER(id, priority, time, ptr_size)

参数说明:

  • id:弹窗的唯一标识符(自定义名称)

  • priority:弹窗优先级,数值越大,优先级越高

  • time:弹窗自动退出时长,单位:毫秒

  • ptr_size:弹窗全局内存大小,由框架统一分配管理

1.1.2. 弹窗消息类型说明¶

POPUP_MSG_HANDLER 中popup_msg_t 类型如下:

消息类型

触发时机

核心用途与处理要点

POPUP_MSG_ONSTART

弹窗启动时

可进行数据初始化及背景页面创建,此消息仅接收一次

POPUP_MSG_ONRESUME

弹窗激活时

仅在弹窗处于暂停(pause)状态时可被使用,用于恢复弹窗的正常运行状态

POPUP_MSG_ONPAUSE

弹窗暂停时

仅在弹窗处于启动、激活或重新刷新状态时可被调用,用于暂停弹窗的运行

POPUP_MSG_ONREFR

弹窗刷新时

当收到重复的弹窗消息时被调用,用于更新弹窗内容

POPUP_MSG_ONSTOP

弹窗销毁时

需释放用户申请的内存及删除创建的任务,当前屏幕上的对象无需主动删除
(框架会在发送此消息后自动清理屏幕及控件)

POPUP_MSG_ONDESTROY

弹窗摧毁时

不会立即执行,在应用涉及列表嵌套时设置,将在退出列表循环后执行

POPUP_MSG_ONSUSPEND

弹窗挂起时

触发时不会创建新的弹窗消息,用于临时挂起弹窗

1.1.3 调度接口¶

  1. 运行已注册的弹窗,调用接口:

/**
 * @brief  运行指定ID的弹窗
 * @param  id         弹窗唯一标识符,与注册时的id保持一致
 * @param  user_data  用户自定义数据,可透传给弹窗内部回调函数,无数据传NULL
 * @return int        执行状态码,执行成功返回0,失败返回对应错误码
 */
int popup_run(const char *id, void *user_data)
  1. 弹窗销毁相关接口:

/**
 * @brief  退出指定ID的弹窗,释放对应弹窗资源
 * @param  id  弹窗唯一标识符
 * @return int 执行状态码,执行成功返回0,失败返回对应错误码
 */
int popup_exit(const char *id)

/**
 * @brief  销毁当前系统中所有已创建的弹窗,清空全部弹窗资源
 * @return int 执行状态码,执行成功返回0,失败返回对应错误码
 */
int popup_destroy_all(void)

1.2 示例¶

注册找手机提醒弹窗示例:

/**
 * @brief  弹窗启动回调函数 (对应POPUP_MSG_ONSTART)
 * @param  param  弹窗节点句柄,对应框架内部结构体‘popup_node_t’指针
 * @note   弹窗创建初始化时触发,该回调只会执行一次,做页面初始化/内存赋值/配置初始化
 */
static void on_start(void *param)
{
    // 获取弹窗框架分配的内存指针,强转为当前弹窗结构体类型
    p_find_phone_win = (popup_find_phone_t *) POPUP_GET_NODE_MEM_PTR;
    // 断言校验,防止内存分配失败导致的空指针操作
    RT_ASSERT(p_find_phone_win);

    // 关闭屏幕锁屏功能,保证弹窗正常显示与操作
    app_screen_lock_enable(false);
    
    // 弹窗页面UI创建:背景页面、文本标签、图标、按钮等控件初始化及布局
    // 弹窗业务数据初始化、定时器创建、事件回调注册等逻辑
    ...
}

/**
 * @brief  弹窗刷新回调函数 (对应POPUP_MSG_ONREFR)
 * @param  param  弹窗节点句柄,对应框架内部结构体‘popup_node_t’指针
 * @note   弹窗收到重复的启动指令时触发,用于更新弹窗内容,避免重复创建弹窗
 */
static void on_refr(void *param)
{
    // 指针非空校验,防止非法内存访问导致程序崩溃
    if (p_find_phone_win && p_find_phone_win->bg_page)
    {
        // 清空弹窗背景页的所有子控件,准备重新绘制刷新内容
        lv_obj_clean(p_find_phone_win->bg_page);
        
        // 重新绘制弹窗页面、更新实时展示数据、刷新控件状态等逻辑
        ...
    }
}

/**
 * @brief  弹窗销毁回调函数 (对应POPUP_MSG_ONSTOP)
 * @param  param  弹窗节点句柄,对应框架内部结构体‘popup_node_t’指针
 * @note   弹窗退出销毁时触发,做资源释放、状态复位等收尾操作
 */
static void on_stop(void *param)
{
    // 全局指针置空,防止野指针访问
    p_find_phone_win = NULL;
    // 恢复屏幕锁屏功能,还原系统默认状态
    app_screen_lock_enable(true);
    
    // 释放用户手动申请的内存、删除自定义定时器/任务等收尾操作
    // 控件无需手动删除,由框架自动清理
    ...
}

// 注册找手机的提醒弹窗
// 优先级:3,自动退出时间:10000ms,内存大小:sizeof(popup_find_phone_t)
POPUP_REGISTER("find_phone", 3, 10000, sizeof(popup_find_phone_t));

参考例程路径:solution\examples\watch\application\popup\find_phone。

2. 外置弹窗¶

2.1 注册¶

外置弹窗的注册流程、调用接口与内置弹窗完全一致,仅需在当前弹窗文件最开头添加以下宏定义即可启用外置弹窗模式:

#define DYN_APP

⚠️注意事项
目前单个应用仅支持注册一个弹窗实例;若业务场景需要实现多弹窗功能,可在当前注册的弹窗页面业务逻辑中,通过自定义标识 / 消息类型做逻辑区分,在同一个弹窗回调内实现不同样式、不同内容的多弹窗展示效果。

2.2 示例¶

注册闹钟提醒弹窗示例:

// 定义宏开启外置弹窗模式,必须写在文件最开头
#define DYN_APP

// 定义模块名称(必须与动态应用APP_ID相同,模拟器调试使用)
#define _MODULE_NAME_   'alarm'
// 包含资源使用接口头文件
#include "app_module.h"

// 弹窗相关结构体定义、全局变量声明
// 弹窗ONSTART/ONREFR/ONSTOP等回调函数实现
// 业务逻辑处理代码
...

// 注册闹钟提醒弹窗
// 优先级:5,自动退出时间:30000ms,内存大小:sizeof(popup_alarm_t)
POPUP_REGISTER("alarm", 5, 30000, sizeof(popup_alarm_t));

参考例程路径:solution\examples\_dynamic_app\c\app\alarm\src\popup_alarm.c。

上一章
表盘(WF)
下一章
息屏显示(AOD)
© 版权所有 2019 - 2026 思澈科技(南京)有限公司。

使用Sphinx构建,主题基于Shibuya。