Android 我应该使用意向服务吗?

Android 我应该使用意向服务吗?,android,service,android-asynctask,intentservice,Android,Service,Android Asynctask,Intentservice,我有一个用户登录屏幕。用户按下一个登录按钮,我创建一个IntentService来连接到我的rest服务并返回一个身份验证结果 现在,我想要实现的功能是:如果活动被暂停(即进入后台),那么意图服务应该仍然运行,并且它确实运行。但是如果我使用任务管理器来终止应用程序,那么intent服务应该停止,尽管现在它没有停止。它继续执行onHandleIntent,直到完成。如果我手动调用stopSelf(),则会调用ondestory(),但onHandleIntent方法会继续执行。如何强制OnHand

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

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


我是否应该将intent service用于此功能或其他功能(如service或asynctask)?

在你的
onDestroy()方法中停止它

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

我不知道为什么“呼叫返回”不是你的选择?我假设您的意思是检查一个条件,并在条件满足时退出循环或块。这通常是线程(在服务或其他地方)结束的方式(尽管还有其他线程)。您的服务线程可以侦听已发生的特定事件(例如,如果活动已被破坏,则在调用活动的
onDestroy
时在文件或数据库中设置属性,但如果这是您想要的,则可能不应使用服务),然后
run()
可以正常返回

但是,如果无论用户在其设备上(在应用程序内部或外部)做什么,这都是您想要完成的任务,那么这应该是一项不应从外部中断的任务。它应该一直持续到完成为止


如果您能更好地定义何时停止此服务,可能会更好。

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

我不知道为什么“呼叫返回”不是你的选择?我假设您的意思是检查一个条件,并在条件满足时退出循环或块。这通常是线程(在服务或其他地方)结束的方式(尽管还有其他线程)。您的服务线程可以侦听已发生的特定事件(例如,如果活动已被破坏,则在调用活动的
onDestroy
时在文件或数据库中设置属性,但如果这是您想要的,则可能不应使用服务),然后
run()
可以正常返回

但是,如果无论用户在其设备上(在应用程序内部或外部)做什么,这都是您想要完成的任务,那么这应该是一项不应从外部中断的任务。它应该一直持续到完成为止


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

我只希望在调用它的活动被销毁时停止IntentService。如果创建IntentService的活动已暂停(当前已暂停),则IntentService应继续执行。当活动被销毁时对服务调用stopSelf()会调用服务的onDestroy方法,但OnHandleContent会继续执行,它不会停止。如果您希望在活动被销毁时停止任务,则我不会使用服务。我将使用一个线程来执行onHandleIntent方法中的代码。您可以手动终止线程,或者(我建议您)可以侦听活动的onDestroy调用中设置的条件。通常我有一个名为“isLive”的静态布尔值,我在onCreate中设置为true,在onDestroy中设置为false,它通常用于此目的。亲爱的伙计,谢谢,这正是我想要的答案!我只希望在调用IntentService的活动被销毁时停止该服务。如果创建IntentService的活动已暂停(当前已暂停),则IntentService应继续执行。当活动被销毁时对服务调用stopSelf()会调用服务的onDestroy方法,但OnHandleContent会继续执行,它不会停止。如果您希望在活动被销毁时停止任务,则我不会使用服务。我将使用一个线程来执行onHandleIntent方法中的代码。您可以手动终止线程,或者(我建议您)可以侦听活动的onDestroy调用中设置的条件。通常我有一个名为“isLive”的静态布尔值,我在onCreate中设置为true,在onDestroy中设置为false,它通常用于此目的。亲爱的伙计,谢谢,这正是我想要的答案!怎么用?已调用onDestroy(),但如何从onDestroy()停止onHandleIntent()方法?如何?已调用onDestroy(),但如何从onDestroy()停止onHandleIntent()方法?