簡體   English   中英

為什么在單擊最小化按鈕而不是在“applicationDidEnterBackground”之后單擊關閉按鈕會調用“applicationWillTerminate”?

[英]Why does clicking the close button call `applicationWillTerminate` after `applicationDidEnterBackground` while clicking the minimize button doesn't?

我在 Unity 中創建了一個新的空項目並在 iOS 平台上構建它並在 Mac Catalyst 上運行它。 但是,我想弄清楚關閉和最小化之間的區別。 在日志的幫助下,他們都調用了applicationWillResignActiveapplicationDidEnterBackground 但是沒有 backgroundTasks 要做,那么為什么單擊關閉按鈕會在applicationWillTerminate之后調用applicationDidEnterBackground而單擊最小化按鈕卻沒有呢?

我問這個問題是因為如果有 backgroundTasks 要做,那么單擊關閉按鈕並不會真正退出應用程序,它會執行 backgroundTasks。 所以我想在點擊關閉按鈕時,我不想做 backgroundTasks,只需調用applicationWillTerminate並退出它。 但是我該怎么做呢? 迷惑了我很久...

任何建議將不勝感激!

你說:

關閉和最小化既進入后台又做后台任務,對嗎?

是的, beginBackgroundTask任務將繼續,無論用戶是最小化應用程序還是關閉窗口。 如果用戶明確退出應用程序,它甚至會這樣做。 只有崩潰或強制退出將不允許后台任務繼續進行。

我不希望我的應用程序在單擊關閉后執行后台任務,因為后台任務需要幾秒鍾才能完成。

問題是你不知道它是被最小化還是關閉了。 macOS willMiniaturizeNotification通知不適用於 Catalyst 應用程序。

應用程序需要等待后台任務完成后退出。 我只想在點擊關閉后立即退出我的應用程序並且不需要執行后台任務,但我不知道如何?

這在 Catalyst 應用程序中可能根本不可能。 鑒於這對最終用戶是完全透明的並且只需要幾秒鍾,您可能必須決定是否接受此限制。 如果沒有,您可能會被迫考慮重寫 AppKit。


以上是一個 Catalyst 問題,但對於 AppKit 開發人員來說,要在關閉窗口時退出applicationShouldTerminateAfterLastWindowClosed ,請實現applicationShouldTerminateAfterLastWindowClosed 這里不相關,但它是如何控制 AppKit 中關閉按鈕的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM