Kailang Blog

Electron 应用处理长任务2020-11-26Θ

Electron 应用在执行一些长时间任务(比如上传、下载),我们想关闭界面后任务依旧执行。再次打开界面,依旧可以看到正在执行的任务以及任务进度。托盘可以帮我们实现这个功能。

创建托盘和菜单示例#

  • 实例化 Tray 并传入图标路径;
  • 创建菜单并配置到托盘中。

基于托盘功能实现后台运行应用#

关闭应用前唤醒对话框二次确认#

关闭应用时,触发对话框,可支持 3 种场景:

  • 点击「取消」取消关闭操作;
  • 点击「退出」,「后台运行」选中时,界面关闭,托盘不关闭,任务继续执行;
  • 点击「退出」,「后台运行」不选中,界面、托盘关闭,直接退出,任务终止。

效果如下:

electron close mac dialog electron close window dialog

创建托盘并添加菜单操作#

  • 禁用双击(MacOS 系统不支持双击操作)
  • 菜单栏支持操作:关于产品、显示、退出
  • MacOS 默认是左单击打开菜单栏、Windows 是右单击打开菜单栏
  • Windows 左单击显示界面

根据操作系统类型和系统 Mode 定制托盘图标#

MacOS 支持 light、dark 两种 mode,根据 mode 展示不同的图标:

electron tray mac light electron tray mac dark

  • nativeTheme.shouldUseDarkColors 可以判断系统 mode

切换系统 Mode 定制托盘图标改变#

electron tray mac update

  • nativeTheme 提供 update 监听系统本身的 Mode 变化

托盘其他场景#

  • 显示未读消息数 tray.setTitle('6');
  • 有未读消息时图标闪动:通过 setImage 定时轮询切换图标实现

注意事项#

  • MacOS 全屏退出界面是会出现黑屏问题,解决方案

判断如果全屏,在关闭全屏时,先退出全屏再隐藏界面

  • Windows 下面点击关闭出现二次确认框,但是界面马上关闭

需要阻止事件流,在 close 时阻止就可以