我创建了一项服务,我正在使用bindService
函数通过我的活动访问它,但我想在我的活动退出后继续运行我的服务。
为此,我要使用startService
,但之前我使用的是bindService
ServiceConnection
,我正在向handler
发送消息(在服务中) )一旦onServiceConnected
被调用。
但我不知道如何使用startService
发送消息,因为我没有像onServiceConnected
这样的地方将消息发送给处理程序。
注意:我想继续运行我的服务,因为我正在从我的服务中更新小部件。
所以服务有两个角色
答案 0 :(得分:4)
您可以选择与服务进行通信:
请确保在您的服务中使用START_STICKY
,以便在活动结束后继续运行,并startForeground()
显示通知,否则您的服务将在一段时间后被SO杀死(平均而言,30几分钟到一小时)。
开始流程
有了这两个,客户端和服务器将知道彼此的Messenger地址,并且不需要绑定。
停止服务:
要停止服务,请使用您的活动中的以下内容:
stopService(new Intent(ActivityClass.this, ServiceClass.class));
<强>重新连接强>
如果您离开clieant活动(CA)并希望在重新启动应用时重新连接到服务,则有两种选择:
从您的CA再次启动startService。这将再次调用服务中的onStartCommand
。仅当服务尚未运行时才会调用服务onCreate()
。您可以使用上述启动流程获取服务Messenger;
- 您可以将服务Messenger设为公共和静态public static Messenger mMsgService = null;
。因此,当您的CA启动时,它可以检查服务信使是否已初始化(非空)并使用它与服务进行通信。当设置停止时,需要设置mMsgService = null;
答案 1 :(得分:0)
除了绑定到该服务之外,没有其他方式可以与服务进行通信。将服务绑定到活动中并不是必需的,这意味着服务将(或需要)解锁服务的销毁。如果您不调用unbindService方法,则绑定的服务将始终运行。因此解决方案绑定到服务并且不要调用活动的unbindService onDestroy。