我应该使用意向服务吗?

时间:2012-02-29 15:42:36

标签: android service android-asynctask intentservice

我有一个用户登录屏幕。用户按下登录按钮,我创建一个IntentService来连接我的其他服务并返回一个验证结果。

现在这里是我想要实现的功能:如果活动暂停(即进入后台),那么意图服务应该仍然运行,而它确实运行。但是,如果我使用任务管理器来终止应用程序,意图服务应该停止,尽管现在它不会。它继续执行onHandleIntent直到完成。如果我手动调用stopSelf(),则会调用onDestroy(),但onHandleIntent方法会继续执行。如何强制onHandleIntent停止?调用“返回”不是一个选项,因为它可以在一个休息方法调用中被捕获。

我是否应该使用意图服务来实现此功能或其他功能(如服务或asynctask)?

2 个答案:

答案 0 :(得分:0)

onDestroy()方法中停止

答案 1 :(得分:0)

首先,如果您的服务在您的应用程序在前台运行时正在执行某些操作,那么您不需要服务。您的活动或对话框可以产生一个线程来完成您的任务,这些线程将在您的应用结束时结束,因为它们位于您应用的任务范围内。否则,对于您想要一直完成的任务,当用户在设备上做任何事情时,一定要使用服务。

我不确定为什么“回电”不是你的选择?通过这个我假设你的意思是检查条件,并在条件满足时退出循环或阻止。这通常是线程(在服务或其他地方)应该如何结束(尽管还有其他approaches)。您的服务的线程可以侦听已发生的特定事件(如果活动已被销毁,通过在调用活动onDestroy时在文件或数据库中设置属性,但是如果这是您想要的那么您可能不应该使用服务),然后run()可以优雅地返回。

但是,如果这是一项任务,无论用户在他的设备上做什么(在你的应用程序内部或外部)都要做,那么它应该是一个不应该从外部中断的任务。它应该继续下去,直到它完成。

也许您可以更好地定义何时停止此服务?