C# 如何使用mvvmcross解析android服务中的注册服务(工作对象)?
我试图在android服务中使用mvvmcross,代码如下:C# 如何使用mvvmcross解析android服务中的注册服务(工作对象)?,c#,android,mvvmcross,application-lifecycle,C#,Android,Mvvmcross,Application Lifecycle,我试图在android服务中使用mvvmcross,代码如下: public interface IMyWorkerObject { void ShowNotificationIcon(); } [Service] public class MyAndroidService : Service { private Thread myThread; public override void OnCreate() { myThread = new T
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;
}
}
公共接口IMyWorkerObject
{
void ShowNotificationIcon();
}
[服务]
公共类MyAndroidService:服务
{
私有线程读取;
public override void OnCreate()
{
myThread=新线程(()=>
{
做
{
var myWorkerObject=Mvx.Resolve();
myWorkerObject.ShowNotificationIcon();
睡眠(10000);
}虽然(正确);
});
myThread.IsBackground=true;
myThread.Start();
base.OnCreate();
}
公共覆盖StartCommandResult OnStartCommand(意图、StartCommandFlags标志、int-startId)
{
返回StartCommandResult.Sticky;
}
公共覆盖无效OnDestroy()
{
if(myThread!=null)
{
如果(myThread.IsAlive)
myThread.Abort();
myThread=null;
}
}
公共覆盖iBind OnBind(意图)
{
返回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 ...
公共类应用程序:MVX应用程序
{
//…一些代码。。。
公共覆盖无效初始化()
{
base.Initialize();
//正在初始化插件。。
PluginLoader.Instance.EnsureLoaded();
//正在初始化工作对象。。
var services=createabletypes()
.以“服务”结尾;
//启动android服务
var context=Application.context;
var intent=新的intent(Application.Context,typeof(MyAndroidService));
上下文。StartService(意图);
//初始化启动导航
RegisterAppStart();
}
//…一些代码。。。
}
由于返回StartCommandResult.Sticky
android服务重新启动,但在var myWorkerObject=Mvx.Resolve()处抛出异常在OnCreate
方法中的code>:
错误:System.NullReferenceException:对象引用未设置为
位于的对象的实例
在中解析[IMyWorkerObject]()[0x00000]
:0位于App1.MyAndroidService.b_u0()
[0x00000]英寸:0
我做错了什么,或者更好的说法是,有没有关于如何将android服务与mvvmcross结合使用的示例?看看上面的问题和答案——但也要看看mvvmcross github上的问题——有一些棘手的线程问题很难避免。我通常尽可能避免使用自己的线程,并使用async/Wait。过去,当我将简单任务转换为async/await时,它们最终“正常工作”。我也看到了这个错误,你找到解决方案了吗?