如何自动停止使用BIND_AUTO_CREATE启动的服务?

时间:2014-04-02 13:11:35

标签: android service lifecycle

有一些需要完成的长处理,所以我把它放在一个服务中。活动必须能够连接到服务,向用户显示服务的当前结果。所以我使用start Service启动服务,然后在http://developer.android.com/reference/android/app/Service.html# ServiceLifecycle 的LocalService中调用bind Service(使用BIND_AUTO_CREATE)。我希望它运行直到它的工作完成,然后自我停止,即使客户端仍然连接到它。 (或确定客户端解除绑定)是否可以使用示例LocalService执行此操作?

我正在考虑将处理程序传递给服务,以便它可以将消息发送回活动,但我不希望活动泄露。我只是习惯使用服务,所以也许我在滥用它。

编辑:工作负载由几个线程组成,同步并且并行运行,所以我猜想它不是意图服务的好选择。一些数据分析在后台服务中完成,当用户重新启动启动服务的活动时,它应根据后台服务计算的当前值显示一些图形。所有后台处理都在开始时触发,并且只需稍后检查,当活动连接到它时。 Android应该无法停止服务。作业完成后,即使活动已连接,服务也应该能够终止。

2 个答案:

答案 0 :(得分:1)

我刚刚记录了该服务的回调。如果活动未连接到服务,则会将回调设置为null。在这个回调中,我调用stopService()然后在活动上调用finish()。我不确定这是最好的方法,但对我来说效果很好。

答案 1 :(得分:0)

如果你希望服务在完成后停止,我认为你要找的是IntentService,它们作为服务运行,但是在另一个线程中运行,当它们完成时它们会消失。

检查this

编辑:NickT链接更好,请检查that! :)