当应用程序后台运行或锁定屏幕打开时如何保持macOS应用程序进程运行

问题描述 投票:0回答:1

我有一个应用程序具有一些运行时间较长的生成报告的过程-这些过程可能需要5到10分钟才能运行,但是一旦用户切换到另一个应用程序,报告过程就会暂停。同样,如果用户锁定Mac,则该应用会停止处理。

发生了什么事?这是macOS的一项新功能吗-我当时印象中进程将继续使用空闲CPU时间运行-如果没有其他应用程序在运行,这将是大部分CPU时间。

我已经尝试了所有节电和安全设置,但都没有用。是的,Mac已插入主电源。

macos background
1个回答
0
投票

[确定,似乎答案是将代码包装在下面,以使OS知道您希望在应用程序后台运行或锁定屏幕打开时继续进行处理。

DispatchQueue.global().async {

   let thisActivity = ProcessInfo.processInfo.beginActivity(options: .userInitiated, reason: "Batch processing user report")

   // Do stuff here 
   // e.g. 
   let operation = Operation()
   let queue = DispatchQueue()
   queue.addOperation(operation)
   queue.waitUntilAllProcessesAreFinished()
   //...

   ProcessInfo.processInfo.endActivity(thisActivity)

}

我还没有测试所有选项,以查看它们是否都可以工作,但是'.userInitiated'一直运行到完成为止,并且不会阻止用户将系统置于睡眠状态。其他选项的行为可能有所不同。

© www.soinside.com 2019 - 2024. All rights reserved.