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
我用 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 时,我的应用程序应该关闭 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();