Xamarin.Mac中的应用程序背景

时间:2016-08-17 10:50:26

标签: xamarin xamarin.mac

如何在 Xamarin.Mac 中实现应用程序后台处理。我想要的东西类似于 android服务

  

Android服务 - 服务是一个应用程序组件,可以在后台执行长时间运行的操作,而不是   提供用户界面。另一个应用程序组件可以启动   服务,即使用户,它仍然在后台运行   切换到另一个应用程序此外,组件可以绑定   与它交互甚至执行进程间的服务   通信(IPC)。例如,服务可以处理网络   交易,播放音乐,执行文件I / O或与内容交互   提供者,全部来自后台。 〜Android.com

先谢谢。

1 个答案:

答案 0 :(得分:3)

正确的方法是使用{{3}将您的应用程序安装为 LaunchAgent (每用户实例)或 LaunchDaemon (每台机器实例) },以及'应用程序类型'设置(在" Xamarin Studio"或" Visual Studio for Mac"项目选项对话框)应设置为"可执行文件"而不是"可执行的UI" (或类似的。)

作为&#34; LaunchAgent&#34;您具有与桌面交互的选项,并且您的代码在每个登录用户的上下文中运行,而不是在系统进程帐户下运行。你不会在“停靠栏”中看到一块瓷砖。 (除非您分配NSApp),并且您只看到状态菜单栏&#39;如果您明确调用Mac API来实现它。此外,launchd将定期检查并启动您的进程,确保始终正在运行。)没有要求您使用任何Cocoa / Mac API来实现代理/守护程序,您可以运行任何<{1}}下的控制台应用程序,上述内容仍然适用。

对于macOS平台,与launchd的集成是launchd,它同样适用于Xamarin.Mac开发的应用程序,因为它可以用于任何其他平台/工具链(Java,C ++,Obj-C,SWift ,. ..),如果我不得不猜测学习如何使用launchd对大多数开发者来说是一个2-4小时的投资。

因为 Xamarin.Mac本身并不明确支持launchd (而且IMO不应该),所以您还需要自己调用launchd。作为一名经验丰富的.NET开发人员,我发现它包含了所有的“启动”功能。在一个&#34;安装程序类&#34;运行良好(那么你只需运行non-trivial, but well documented来安装/卸载您的代理/服务/应用程序。)这些安装程序类也可以实现在Windows和Linux上运行,这意味着跨平台安装只需要使用launchctl

另外,installutil,但这不是必需的。但是,大多数人会发现编辑现有的plist比与launchd集成更容易。值得注意的是,一个行为差异在于编辑plist以包含you can set particular properties in your app bundle Info.plistLSBackgroundOnly并不能保证您的应用程序正在运行,但使用installutil会。

HTH

参考