繁体   English   中英

在应用程序的整个生命周期中保持服务的生命周期

[英]Keeping a service alive throughout the lifetime of the application

我有一个简单的服务接口,用于通过HTTP与服务器同步数据。 服务接口具有启动和停止同步过程的方法。 这个想法是在用户登录后开始同步过程,并在用户退出前在应用程序末尾停止同步。 同步服务将每隔几分钟检查一次新消息,然后使用MvxMessenger插件将新的/更改的数据通知给ViewModel。

为确保同步服务在应用期间有效,推荐的方法是什么? 我当前使用的是自定义IMvxAppStart,它将服务接口注册为单例,然后保存对服务接口的静态引用。 是否足以在应用程序的整个生命周期中保持服务的生命,还是有更好的方法?

public class App : MvxApplication
{
    public override void Initialize()
    {
        ...
        RegisterAppStart(new CustomAppStart());
    }
}

public class CustomAppStart : MvxNavigatingObject, IMvxAppStart
{
    public static ISyncClient SynchronizationClient { get; set; }

    public void Start(object hint = null)
    {
        SynchronizationClient = Mvx.Resolve<ISyncClient>();
        ShowViewModel<SignInViewModel>();
    }
}

public interface ISyncClient
{
    void StartSync();
    void StopSync();

    bool IsSyncActive { get; }
}

您不需要为此使用静态属性。 当您将接口注册为单例时,IoC会为您完成工作。 示例:在我们的一个应用程序中,我们需要一个状态属性,其中包含整个应用程序生命周期内的重要数据。

需要此状态的模型仅使用以下代码片段:

protected IApplicationState AppState
{
    get { return _appstate ?? (_appstate = Mvx.GetSingleton<IApplicationState>()); }
}
private IApplicationState _appstate;

但是:您也可以使用静态属性来执行此操作。 但是在这种情况下,您不需要IoC中的单例值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM