目标:使用 Xamarin 工作室开发一个跨平台移动应用程序,在特定日期和时间显示一条消息。
问题:
a)如果我想开发这样的应用程序,平台之间将/可以共享什么东西。 (将不胜感激具有可能类的结构设计)
b) 使用 Timer 或 AlarmManager 更好吗?
c) 应该为共享核心项目(可移植类库/平台特定库/普通 C# 项目)创建什么类型的项目?
提前致谢。
最佳答案
在过去的几周里,我一直专注于如何在 Android 和 iOS 之间最好地共享代码,以下是根据我的经验提出的建议:
a) 通常,您可以在平台之间共享任何非平台特定的东西。
我倾向于使用对由接口(interface)定义的 View 进行引用的演示者或调解者。例如,如果我有一个登录 View ,我会让我的 iOS UIViewController 和我的 Android Activity 都实现一个 ILoginView 接口(interface)。该接口(interface)将定义以下内容:
演示者/中介者将负责监听正在提交的登录,获取用户名/密码,并将这些内容传递给服务调用或命令。每当中介收到命令/服务的结果时,它将负责调用 ShowLoginFailed 或 GoNextScreen。
我还使用接口(interface)来定义我的 SQLite 管理器 (https://github.com/praeclarum/sqlite-net/tree/master/src),或负责进行实际 Web API 服务调用的委托(delegate)。我发现我必须这样做,因为 SQLite 管理器和 RestSharp 需要进行一些特定于平台的编译。
长话短说,接口(interface)是你的 friend ,尤其是当你将它们与某种依赖注入(inject)系统结合时。
b) 如果您希望您的用户在设备处于 sleep 模式或处于另一个应用程序时收到警报提示,我会使用 AlarmManager for Android 和 LocalNotification for iOS。
c) 您可以将 PCL 与 Xamarin.Android 和 Xamarin.iOS 一起使用。问题是 PCL 还没有得到 100% 的支持。但是,您可以对开发环境进行一些调整,希望能将您带到您想要的位置:
一旦你完成了所有这些,你应该可以很好地让你的 PCL 工作。我发现这值得额外的工作,因为我现在可以在 XS 中创建一个单元测试项目,将其链接到 PCL 并从 IDE 中运行测试。此外,我可以使用像 Moq 这样的库来模拟我的 View 并进行集成测试。
Xamarin promise 将“很快”提供完整的 PCL 支持,我们不必为这些黑客行为而烦恼。
关于Xamarin:简单的跨平台报警应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15618349/