我用Xamarin.Android开发了一个StepCounter应用程序。
我现在有什么:
1)在OnCreate()
中的MainActivity中,我打电话
StartService(new Intent(this, typeof(MyService)));
然后在OnStart()
我致电BindService(serviceIntent, MyServiceConnection, Bind.AutoCreate);
2)这给了我一个很好的服务,1)前景2)StartService和BindService 3)在StartCommandResult.Sticky
中返回OnStartCommand()
3)在MyService中,我将MainActivity注册为每个检测到的步骤的监听器。我按建议here使用界面,并且MainActivity中的UI实时更新,一切都很完美。
但是有一个问题。
当我从最近的任务中滑动MainActivity时,我的应用程序应该关闭/完成/关闭,所以它确实如此。
但MyService是STICKY所以它再次启动,用户可以在状态栏中看到通知。这正是我想要的。粘性不朽的服务。
而第一种情况:用户按下通知 - >这会创建一个活动 - > OnStart()
再次提供与MyService的绑定 - >工作正常。
第二种情况:用户未按通知 - >没有创建任何活动(它是唯一的服务) - >用户做了一些步骤 - >申请失败。
我不知道如何处理第二种行为。
也许这是因为我将MainActivity注册为听众?如果我销毁它,没有什么可以更新我的服务?在OnStop()
我致电UnbindService(MyService);
,我希望即使没有活动,MyService也能正常工作。但显然,我做错了。
感谢任何帮助。
UPD:找到解决方案,请参阅下面的答案。
答案 0 :(得分:1)
感谢大家的帮助!
解决方案非常简单。在MyService中,我使用接口将MainActivity注册为侦听器。所以破坏活动导致失败并不奇怪 - 没有什么可以更新了。
在调用this.listener.UpdateUI();
答案 1 :(得分:0)
我了解你的情况,并以某种方式也得到了你想要实现的想法。
在服务类中,您必须使用的返回类型是START_STICKY,我建议您使用START_NOT_STICKY。
两者都有自己的意义和用途。进一步说明如何使用您可以浏览this answer
的返回类型