electron的开发过程中,单实例的需求一直都存在。以前在electron2.x时代,有个解决函数叫做:makeSingleInstance。在electron3.x甚至electron4.x时代,出现了一个新的函数叫做:requestSingleInstanceLock。本文讲述的就是这两个函数的基本使用范例的。

苏南大叔:electron 如何实现单实例?两种方案解决单实例问题 - electron-single-instance
electron 如何实现单实例?两种方案解决单实例问题(图4-1)

本文测试环境:mac

方案一:通用的makeSingleInstance

无论electron版本高低,此函数一律通用,下面的是使用范例:

苏南大叔:electron 如何实现单实例?两种方案解决单实例问题 - electron-单实例
electron 如何实现单实例?两种方案解决单实例问题(图4-2)

主进程代码:

let mainWindow
//...
function createWindow () {
  //...
}
const shouldQuit = app.makeSingleInstance((commandLine, workingDirectory) => {
  if (mainWindow) {
    if (mainWindow.isMinimized()) mainWindow.restore()
    mainWindow.focus()
  }
})
if (shouldQuit) {
  app.quit()
}
app.on('ready', createWindow)

具体的函数说明见这里:

方案二:3.x及以上专用requestSingleInstanceLock

此方法使应用程序成为单个实例应用程序, 而不是允许应用程序的多个实例运行, 这将确保只有一个应用程序的实例正在运行, 其余的实例全部会被终止并退出。

requestSingleInstanceLock这个函数是在electron@3.x系列中,添加的新函数。理论上来说,3.x系列及以后版本,应该都支持这个函数。其使用范例如下:

苏南大叔:electron 如何实现单实例?两种方案解决单实例问题 - electron-单实例2
electron 如何实现单实例?两种方案解决单实例问题(图4-3)

newsn.net:这里是【评论】可见内容

这个函数,有两个相关函数分别是:
查询单实例锁状态:

app.hasSingleInstanceLock()

释放单实例锁:

app.releaseSingleInstanceLock()
如果你的程序是应用的主要实例并且当这个方法返回true时,你应该继续让你的程序运行。 如果当它返回false如果你的程序没有取得锁,它应该立刻退出,并且将参数发送给那个已经取到锁的进程。

这些函数是electron@3.0系列专属函数,2.0系统中会报错。

app.requestSingleInstanceLock is not a function

苏南大叔:electron 如何实现单实例?两种方案解决单实例问题 - electron2x-lock-error
electron 如何实现单实例?两种方案解决单实例问题(图4-4)

总结

electron3.x系列增加了很多新的函数,这个也是其中的一条新函数吧。使用起来是比较简单的,所以,没有特别的好说明的地方,大家抄袭下使用范例即可。唯一需要注意的是:这两个例子之中,app.on('ready', createWindow)的时机和位置。

下面是electron的系列文章的经验汇总,苏南大叔再一次推荐给大家:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   electron

本站的忠实读者小伙伴,正在阅读下面这些文章: