Activity 和服务:滑动行为

Activity and Service: on swipe behavior


我用 Xamarin.Android.

开发了一个 StepCounter 应用程序 我现在有什么:

1) 在 OnCreate() 的 MainActivity 中我调用 StartService(new Intent(this, typeof(MyService)));
然后在 OnStart() 我调用 BindService(serviceIntent, MyServiceConnection, Bind.AutoCreate);

2) 这给了我一个很好的服务,它是 1) 前台 2) StartService 和 BindService 3) returns StartCommandResult.Sticky in OnStartCommand()

3) 在 MyService 中,我将 MainActivity 注册为每个检测到的步骤的侦听器。我按照建议 使用界面,MainActivity 中的 UI 实时更新,一切正常。

但是有个问题。
当我从最近的任务中滑动 MainActivity 时,我的应用程序应该关闭 down/finish/going,它确实如此。
但是 MyService 是粘性的,所以它再次启动,用户可以在状态栏中看到通知。这正是我想要的。粘性不灭服务。
而不是 第一种情况 :用户按下通知 -> 创建 activity -> OnStart() 再次提供对 MyService 的绑定 -> 工作正常。
第二种情况:用户没有按下通知 -> 没有 activity 创建(这是唯一的服务) -> 用户做了一些步骤 -> 应用程序失败。

我不知道如何处理这第二种行为。 也许那是因为我将 MainActivity 注册为侦听器?如果我销毁它,就没有什么可以更新我的服务了吗?在 OnStop() 中,我调用 UnbindService(MyService); 并且我希望 MyService 即使没有 activity 也能工作。但是很明显,我做错了。

感谢任何帮助。

UPD:找到解决方案,请参阅下面的答案。

我了解了你的情况,不知何故也明白了你想要实现的想法。

在服务 class 中,您必须使用的 return 类型是 START_STICKY 我建议您使用 START_NOT_STICKY.

两者都有各自的意义和用途。进一步如何使用 return 类型你可以通过 this answer

感谢大家的帮助!
解决方法很简单。在 MyService 中,我使用接口将 MainActivity 注册为侦听器。因此,销毁 activity 会导致失败也就不足为奇了——没有什么可以更新了。 解决方案是在调用 this.listener.UpdateUI();

之前检查是否为 null