好的,所以我编写的应用程序有一个服务(跟踪GPS数据),其中一个主要活动使用bind onStart()
方法绑定到它,并从其中的服务解除绑定{{ 1}}使用onStop()
的方法。
我还有一个活动,它是一个选项屏幕,通过按主活动上的按钮启动。在这个选项屏幕上,我有一个复选框,上面写着“在后台运行”,如果设置为true,则表示当用户使用Home或Back按钮退出应用程序时,服务将继续运行,而不是转动GPS关闭。
如果设置为true,则调用unbindService(ServiceConnection)
和this.startForeground onUnbind
,并分别停止和启动我的位置阅读器this.stopForeground onRebind
和onUnbind
。设置是假的。
如果服务在后台运行,它还会显示通知,以确保用户了解GPS仍在运行并耗尽其电量。依赖onRebind
和startForeground
方法显示和停止此通知。
所以,问题在于,无论此设置是否为真,如果我正在查看选项屏幕,我希望服务继续运行,我不希望该通知出现。所以我设置了一个标志,如果我按下按钮进入选项屏幕,则设置为true,如果标志为true,则不调用unbindService。
这有效,除了一个小问题。如果用户在查看选项屏幕时点击主页按钮,则服务不会停止(如果它仍然绑定到主屏幕),并且如果它应该继续运行,则它不会显示警告通知(当然,这意味着该服务仍被视为在后台)。
我应该如何让这个应用程序以我想要的方式运行?
答案 0 :(得分:0)
好的,所以我找到了一个似乎有用的解决方案。我将选项屏幕绑定到activity的onStart()方法中的服务,并在onStop()中再解除绑定。之前的活动的onStop()方法直到新的onResume()方法之后才被调用,所以它可以工作。
有没有人有更好的方法?将活动绑定到实际上不需要访问的服务似乎很愚蠢。