Sun*_*nny 4 xamarin xamarin.mac
如何在Xamarin.Mac 中实现应用程序后台。我想要一些类似于android 服务的东西:
Android 服务- 服务是可以在后台执行长时间运行操作的应用程序组件,它不提供用户界面。另一个应用程序组件可以启动一个服务,即使用户切换到另一个应用程序,它也会继续在后台运行。此外,组件可以绑定到服务以与其交互,甚至执行进程间通信 (IPC)。例如,服务可以在后台处理网络事务、播放音乐、执行文件 I/O 或与内容提供商交互。~ Android.com
提前致谢。
正确的方法是使用launchd和“应用程序类型”设置(在“Xamarin Studio”或“Visual Studio for Mac 中” )将应用程序安装为LaunchAgent(每用户实例)或LaunchDaemon(每台机器实例)“项目选项对话框)应该设置为“可执行文件”而不是“带有 UI 的可执行文件”(或类似的。)
作为“LaunchAgent”,您可以选择与桌面交互,并且您的代码在每个登录用户的上下文中运行,而不是在系统进程帐户下运行。您不会在“停靠栏”中看到一个磁贴(除非您分配了一个 NSApp),并且如果您明确调用 Mac API 来实现它,您只会看到一个“状态菜单栏”。此外,launchd 将定期检查并启动您的进程,确保它始终运行。)不要求您使用任何 Cocoa/Mac API 来实现代理/守护程序,您可以在下面运行任何控制台应用程序,launchd并且上面会仍然是真实的。
与 launchd 的集成非常重要,但对于 macOS 平台有很好的记录,它同样适用于 Xamarin.Mac 开发的应用程序,就像它适用于任何其他平台/工具链(Java、C++、Obj-C、Swift、.. .),如果我不得不猜测学习如何使用 launchd 对大多数开发人员来说是 2-4 小时的投资。
因为Xamarin.Mac 本身没有对 launchd 的明确支持(IMO 不应该),您还将负责调用launchctl自己。作为一名经验丰富的 .NET 开发人员,我发现将所有“launchctl 丑陋”包装在“安装程序类”中效果很好(然后您只需要运行installutil以安装/卸载您的代理/服务/应用程序。)这些安装程序类也可以实现在 Windows 和 Linux 上工作,这意味着跨平台安装只需要使用installutil.
另外,您可以在应用程序包 Info.plist 中设置特定属性,但这不是必需的。然而,大多数人会发现编辑现有的 plist 比与 launchd 集成更容易。值得注意的是,一个行为差异是编辑 plist 以包含LSBackgroundOnly或LSUIElement不保证您的应用程序正在运行,而是使用launchctlwill。
HTH
launchd Wikipedia.org 上的文章launchctl Apple.com 上的手册页LSBackgroundOnly Apple.com 上的参考LSUIElement Apple.com 上的参考installutilMicrosoft.com 上的参考(也适用于 Mono/Xamarin Linux/Mac 平台,尽管 Windows 使用其自己的“服务控制管理器 (SCM)”API 而不是launchctl.)| 归档时间: |
|
| 查看次数: |
694 次 |
| 最近记录: |