我应该使用intent服务吗?
-
14-11-2019 - |
题
我有一个用户登录屏幕。用户按下登录按钮,我创建一个IntentService连接到我的rest服务并返回身份验证结果。
现在这里是我想要实现的功能:如果活动暂停(即进入后台)然后intent服务应该仍然运行,它确实如此。但是,如果我使用任务管理器杀死应用程序,intent服务应该停止,尽管现在它没有。它继续执行 onHandleIntent
直到完成。如果我手动调用 stopSelf()
, onDestroy()
被称为,但 onHandleIntent
方法继续执行。我该如何强制 onHandleIntent
停下来?调用"return"不是一个选项,因为它可能会陷入一个rest方法调用中。
我应该使用intent service来实现此功能还是其他功能(如service或asynctask)?
解决方案
首先,如果你的服务正在做一些你想做的事情,而你的应用程序在前台运行,那么你不需要一个服务。您的活动或对话框可以生成一个线程来完成您的任务,并且这些线程将在您的应用程序结束时结束,因为它们在您的应用程序的任务范围内。否则,对于您一直想要完成的任务,当用户可以在设备上执行任何操作时,请务必使用服务。
我不确定为什么"调用返回"不是你的选择?通过这个我假设你的意思是检查一个条件,并退出循环或块,如果条件满足。这通常是线程(在服务或其他地方)应该如何结束(尽管还有其他 方法).服务的线程可以侦听已发生的特定事件(例如,如果活动已被销毁,则通过在活动的 onDestroy
被调用,但如果这是你想要的,那么你可能不应该使用服务),然后 run()
能优雅地返回。
但是,如果这是一个无论用户在他的设备上做什么(在您的应用程序内部或外部)都要完成的任务,那么它应该是一个不应该从外部中断的任务。它应该继续下去,直到它完成。
也许如果您可以更好地定义何时停止此服务?
其他提示
停止在你的 onDestroy()
方法