Electron 应用处理长任务2020-11-26Θ
目录
Electron 应用在执行一些长时间任务(比如上传、下载),我们想关闭界面后任务依旧执行。再次打开界面,依旧可以看到正在执行的任务以及任务进度。托盘可以帮我们实现这个功能。
创建托盘和菜单示例#
- 实例化
Tray
并传入图标路径; - 创建菜单并配置到托盘中。
基于托盘功能实现后台运行应用#
关闭应用前唤醒对话框二次确认#
关闭应用时,触发对话框,可支持 3 种场景:
- 点击「取消」取消关闭操作;
- 点击「退出」,「后台运行」选中时,界面关闭,托盘不关闭,任务继续执行;
- 点击「退出」,「后台运行」不选中,界面、托盘关闭,直接退出,任务终止。
效果如下:
创建托盘并添加菜单操作#
- 禁用双击(MacOS 系统不支持双击操作)
- 菜单栏支持操作:关于产品、显示、退出
- MacOS 默认是左单击打开菜单栏、Windows 是右单击打开菜单栏
- Windows 左单击显示界面
根据操作系统类型和系统 Mode 定制托盘图标#
MacOS 支持 light、dark 两种 mode,根据 mode 展示不同的图标:
nativeTheme.shouldUseDarkColors
可以判断系统 mode
切换系统 Mode 定制托盘图标改变#
nativeTheme
提供update
监听系统本身的 Mode 变化
托盘其他场景#
- 显示未读消息数
tray.setTitle('6')
; - 有未读消息时图标闪动:通过
setImage
定时轮询切换图标实现
注意事项#
MacOS
全屏退出界面是会出现黑屏问题,解决方案
判断如果全屏,在关闭全屏时,先退出全屏再隐藏界面
Windows
下面点击关闭出现二次确认框,但是界面马上关闭
需要阻止事件流,在 close
时阻止就可以