1

好的,所以我编写的应用程序有一个服务(跟踪 GPS 数据),它有一个主要活动,它在它的方法中使用 bindService 绑定到它onStart(),并在它的onStop()方法中使用unbindService(ServiceConnection).

我还有一个活动,它是一个选项屏幕,通过按下主活动上的按钮启动。在这个选项屏幕上,我有一个复选框,上面写着“在后台运行”,如果设置为 true,则意味着当用户使用 Home 或 Back 按钮退出应用程序时,服务将继续运行,而不是打开 GPS离开。

我通过调用this.startForeground onUnbind和来执行此操作this.stopForeground onRebind,如果设置设置为 true,则分别停止和启动我的位置读取器onUnbindonRebind如果设置为 false。

如果该服务在后台运行,它还会显示一条通知,以确保用户了解 GPS 仍在运行并耗尽他们的电量。该通知通过startForegroundstopForeground方法显示和停止。

因此,问题在于无论此设置是否正确,如果我正在查看选项屏幕,我希望服务继续运行,并且我不希望出现该通知。因此,如果我按下按钮进入选项屏幕,我设置一个设置为 true 的标志,如果标志为 true,则不要调用 unbindService。

这工作,除了一个小问题。如果用户在查看选项屏幕时点击主页按钮,则服务不会停止(因为它仍然绑定到主屏幕),如果它应该继续运行,则不会显示警告通知(当然,这意味着该服务仍被视为在后台)。

我应该如何让这个应用程序按照我想要的方式运行?

4

1 回答 1

1

好的,所以我刚刚找到了一个似乎可行的解决方案。我在活动的 onStart() 方法中将选项屏幕绑定到服务,然后在 onStop() 中再次取消绑定。前一个活动的 onStop() 方法在新活动的 onResume() 方法之后才被调用,因此它可以工作。

有没有人有更好的方法?将活动绑定到它实际上不需要访问的服务似乎很愚蠢。

于 2010-11-12T02:24:44.940 回答