Как разрешить зарегистрированные сервисы (рабочие объекты) в сервисе Android с помощью mvvmcross?

Я пытаюсь использовать mvvmcross в службе Android, это код:

public interface IMyWorkerObject
{
    void ShowNotificationIcon();
}

[Service]
public class MyAndroidService : Service
{
    private Thread myThread;
    public override void OnCreate()
    {
        myThread = new Thread(() =>
            {
                do
                {
                    var myWorkerObject = Mvx.Resolve<IMyWorkerObject>();
                    myWorkerObject.ShowNotificationIcon();    
                    Thread.Sleep(10000);
                } while (true);
            });
        myThread.IsBackground = true;
        myThread.Start();
        base.OnCreate();
    }
    public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
    {
        return StartCommandResult.Sticky;
    }
    public override void OnDestroy()
    {
        if (myThread != null)
        {
            if (myThread.IsAlive)
                myThread.Abort();
            myThread = null;
        }
    }
    public override IBinder OnBind(Intent intent)
    {
        return null;
    }
}

и у меня есть этот код в моем app.cs

public class App : MvxApplication
{
    // ... some code ...
    public override void Initialize()
    {
        base.Initialize();

        //Initializing Plugins..
        PluginLoader.Instance.EnsureLoaded();

        //Initializing Work Objects..
        var services = CreatableTypes()
            .EndingWith("Service");

        // start android service
        var context = Application.Context;
        var intent = new Intent(Application.Context, typeof(MyAndroidService ));
        context.StartService(intent);

        //Initializing Start Navigation
        RegisterAppStart<MainViewModel>();
    }

    // ... some code ...

}

все работает нормально, пока я полностью не закрою приложение, из-за возврата StartCommandResult.Sticky служба Android перезапускается, но выдает исключение в var myWorkerObject = Mvx.Resolve<IMyWorkerObject>(); в OnCreate метод:

Ошибка: System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта в Cirrious.CrossCore.Mvx.Resolve[IMyWorkerObject] () [0x00000] в: 0 в App1.MyAndroidService.b__0 () [0x00000] в: 0

Что я делаю не так, или лучше сказать, есть ли примеры того, как использовать службы Android с mvvmcross?

0 ответов

Другие вопросы по тегам