Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

electronでTray Iconを使った時、メニューバーからアイコンが消える

More than 3 years have passed since last update.

解決策

new Tray() を代入する変数を app.on('ready')のコールバック関数のブロック外で宣言する。

原因

Trayのインスタンスが入る変数をapp.on('ready')のコールバック内に宣言するとGCされる事がある。

GC(ガベージコレクション)とは

ガベージコレクション(英語: garbage collection; GC)とは、プログラムが動的に確保したメモリ領域のうち、不要になった領域を自動的に解放する機能である。「 ガベージコレクション」を直訳すれば「ゴミ集め」「ごみ拾い」となる。

プログラムがもうアクセスしないと判断した変数を自動的に破棄する機能。

コード例

良い例

let tray = null;

app.on('ready', () => {
  tray = new Tray('path/to/icon');
});

悪い例

app.on('ready', () => {
  const appIcon = new Tray(icon);  //一定時間アクセスがない場合はGCされる
});

背景

appの起動が完了するより前にTrayのインスタンスは作れない(electronがエラーを返す)。

そのためnew Tray()をapp.on('ready') 等のコールバック内に書くのが一般的。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away