electron 生命周期

news2024/10/6 19:54:55

生命周期事件:

  • reday: app初始化完成
  • dom-ready:一个窗口的文本加载完成,可以进行dom操作
  • did-finish-load: 导航完成时触发,选项卡旋转器停止旋转时(发生在dom-ready后)比如点击一个选项卡后,某一个选项下的dom加载完成后触发,
  • window-all-closed:所有窗口关闭时触发
  • before-quit:应用程序关闭窗口之前触发
  • will-quit:在窗口关闭并且应用退出时触发
  • quit:当所有窗口被关闭时触发
  • close:当窗口关闭时触发,此时应删除窗口应用(将保存窗体的引用对象(一些变量的释放)删除)

当监听了window-all-closed事件并且不做任何操作时时,before-quit、will-quit、quit,这三个事件就会失效

通过下面代码演示钩子加载的书顺序:

const { app, BrowserWindow } = require("electron");

// 创建窗口
function createWindow() {
  app.whenReady().then(() => {
    const mainWin = new BrowserWindow({
      width: 600,
      height: 400,
    });

    mainWin.loadFile("index.html");

    mainWin.webContents.on("did-finish-load", () => {
      console.log("333-did-finish-load");
    });

    mainWin.webContents.on("dom-ready", () => {
      console.log("222-dom-ready");
    });

    mainWin.on("close", () => {
      console.log("888-close");
      mainWin = null;
    });
  });
}

app.on("window-all-closed", () => {
  console.log("444-window-all-closed");
  app.quit();
});

app.on("before-quit", () => {
  console.log("555-before-quit");
});
app.on("will-quit", () => {
  console.log("666-will-quit");
});
app.on("quit", () => {
  console.log("777-quit");
});
app.on("ready", () => {
  console.log("111-ready");
  createWindow();
});

当未关闭窗体时,首次打印出了这三个钩子:

 当关闭窗口时,close和window-all-closed也被触发了,但是另外三个钩子未被触发,这里就证实了,当监听了window-all-closed事件时,before-quit、will-quit、quit,这三个事件就不会触发了,

 

此时需要你 主动 在window-all-closed事件钩子中做关闭操作。 

 

此时关闭窗体会打印 :

 

当未监听 window-all-closed 时,

关闭窗体时则打印:

 测试只有一个窗口,这里为主窗口,所以一关闭就都触发了,当实际有很多窗口时,主窗口888是会最后关闭的,所以这里8排在最后

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于zustand维护的一套跨框架(react/vue)跨应用的状态管理及共享方案

zustand-pub 只要从事前端开发,不论是小程序还是web,都绕不开状态管理。 众所周知, zustand 是一套轻量、便捷、可拓展的状态管理方案,不论国内 or 国外,都备受喜爱,star 数已接近 3W。 而 zustand-pub 则…

ThreadLocal源码深度详解

文章目录 一、ThreadLocal简单使用二、ThreadLocal源码详解1、set方法(1)getMap(t)(2)createMap 2、get方法3、setInitialValue方法 三、ThreadLocalMap详解1、ThreadLocalMap为什么要设置Entry数组2、key计算的下标会重复吗&…

华为OD机试真题 JavaScript 实现【查找两个字符串a,b中的最长公共子串】【牛客练习题】

一、题目描述 查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。 注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开! 数据范围…

C语言第三课-----------加油 加油 加油

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com 目录 数组 操作符 常见关键字 ________________________________________ 紧接上一课,上一篇博客我已经简单介绍了变量的作用域和生命周期,常量,字符串转义字符注释,选择语句,循环语句,函数这些下面…

二叉树题目:二叉树的前序遍历

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 题目 标题和出处 标题:二叉树的前序遍历 出处:144. 二叉树的前序遍历 难度 3 级 题目…

k8s master组件无法重启

1.案例 k8s的master组件出错,删掉pod重新拉起也无法正常启动 kubectl get pod -n kube-system 可以看到controller和scheduler组件都显示异常 kubectl describe pod kube-apiserver-k8s-master03 -n kube-system 通过describe查看组件容器的详细信息也并没有报错…

SpringBoot接口加密解密工具

介绍(项目源码见文末!!!!!!) 在软件项目开发过程中,当需要对后端返回数据进行加密,或者前段向后端发送的数据时加密后的数据,那么在接收前就需要…

DuiLib了解xml的使用和布局

文章目录 1、了解 XML 使用和布局2、VerticalLayout和HorizontalLayout3、TabLayout4、TileLayout5、Container6、ChildLayout 1、了解 XML 使用和布局 本节主要介绍 DuiLib 中 XML 关键字的使用和一些特性,通过构建一个简单的带标题栏和简单结构的窗口&#xff0c…

GCC编译四步和LDS脚本

GCC编译四步 1、预处理:宏定义替换之类的工作 2、编译非汇编:将源代码经过词法分析、语法分析、语义分析转为汇编代码的过程 3、汇编:将汇编代码转为具体二进制机器码的过程(此时由于还没有进行链接,所以虽然是二进…

Context Prior for Scene Segmentation--CVPR, 2020

Context Prior for Scene Segmentation–CVPR, 2020 文章目录 Context Prior for Scene Segmentation--CVPR, 2020一、背景介绍二、方法介绍1.A的生成2.Affinity Loss3.如何从 X X X获取P4.Y操作 一、背景介绍 问题:现阶段,不少语义分割方法所限于卷积结…

快速部署合同管理模板:低代码实现高效率

在现代商业环境中,合同管理是企业日常运营中至关重要的一环。合同是企业与外部实体之间约定的法律文件,合够帮助企业有效管理合同的全生命周期,包括合同创建、审批、签署、执行和归档,以提高合同管理的效率和准确性。 随着企业数…

软件测试面试题(大全)

1.B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行,可以实现跨平台,客户端零维护,维护成本低,但是个性化能力低,响应速度较慢 C/S响应速度快,安全性强,一般应用于局域网中,因…

【操作系统】操作系统最全的总结,5万字干货

文章目录 前言搞清楚几个问题 一、认识操作系统二、计算机硬件三、进程和线程1、进程2、进程模型3、进程的创建4、进程的终止5、进程的层次结构6、UNIX 进程体系7、Windows 进程体系8、进程状态9、进程的实现10、线程11、线程的使用12、经典的线程模型13、线程系统调用14、POSI…

Revit轴网问题:创建标高看不到原来的轴网和轴网转化

一、Revit中创建的标高看不见原先的轴网怎么解决 (1)在Revit中绘制的轴网会默认超过最高标高一定距离,若新绘制的标高会在这距离之上,进入新绘制的“标高3”平面会发现看不到(1至6号轴网)。 (2)进入东立面,拖动轴网往上移动即可。 进入南、北…

MySQL 读写分离代理(Mycat2)

作者:田逸 作者亲自尝试过的开源MySQL读写分离工具有Amoeba、MySQL Proxy、Mycat等,经过仔细测试对比,在某个实际项目中选用Mycat作为MySQL数据库读写分离的代理工具。Mycat当前的最新版本为Mycat2,可从http://dl.mycat.org.cn/2…

60、基于51单片机无线蓝牙温度上下限控制加热系统设计(程序+原理图+PCB源文件+Proteus仿真+参考论文+开题报告+任务书+元器件清单等)

摘 要 随着人们生活水平的提高,对生活环境的要求也越来越高,家用电器越来越趋向于自动控制控制乃至于智能控制,针对目前家庭的实际需要,自动控制水温报警系统比较方便实用,本文就通过51系列单片机来实现一种家用自动控…

VS2013 如何创建动态库和使用

创建动态库具体的步骤是:(以DLL为例) 1、创建一个win32项目 2、选择应用程序类型:DLL; 附加选项:导出符号,勾上; 3、点击完成,就会生成动态库 4、 由于是导出库&#xf…

[细读经典]Megatron论文和代码详细分析(1)

[细读经典]Megatron论文和代码详细分析(1) 导航: 迷途小书僮:[细读经典]Megatron论文和代码详细分析(2)102 赞同 41 评论文章正在上传…重新上传取消 前言 作为一款支持multi-node,multi-GPU的可以直接用来训练GPT3等世界上超大规模的自然…

【C++学习】VScode配置C/C++开发环境

VSCode是一个高级编辑器,只能用来写C/C/Python/Java等代码,不能直接编译这些代码。所以,我们需要搭建编译和调试环境,本文以C/C为例,使用MinGW-w64,将其移植到Windows平台的一个gcc编译器。下面具体介绍如何…

基于Java蜀都天香酒楼网站系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…