Java 用于长时间运行任务的类库异步任务

Java 用于长时间运行任务的类库异步任务,java,android,android-asynctask,Java,Android,Android Asynctask,在我的android应用程序中,我使用了AsyncTask来执行短操作任务,现在我想为长时间运行的任务实现一个相同的东西——是否有具有相同接口的相同库 顺便说一句,请不要建议服务,因为我想在任务完成后更新我的UI 任何建议都将不胜感激 现在我想为长时间运行的任务实现同样的东西 这取决于“长期任务”的性质 如果持续时间不到一秒钟(通常),请坚持使用AsyncTask 如果需要的时间超过1秒但小于15秒,请使用IntentService 如果它将超过15秒,但在更长的秒数后将自行结束,请使用myW

在我的android应用程序中,我使用了
AsyncTask
来执行短操作任务,现在我想为长时间运行的任务实现一个相同的东西——是否有具有相同接口的相同库

顺便说一句,请不要建议
服务
,因为我想在任务完成后更新我的UI

任何建议都将不胜感激

现在我想为长时间运行的任务实现同样的东西

这取决于“长期任务”的性质

  • 如果持续时间不到一秒钟(通常),请坚持使用
    AsyncTask

  • 如果需要的时间超过1秒但小于15秒,请使用
    IntentService

  • 如果它将超过15秒,但在更长的秒数后将自行结束,请使用my
    WakefulIntentService
    ,或使用
    WakefulBroadcastReceiver
    IntentService
    的组合。这些是必要的,有助于在工作进行时保持设备清醒

  • 如果只有当用户指示它应该结束时才会结束(例如,通过按下UI中的某个“停止”按钮),请使用由常规
    服务管理的
    线程
    ,如果需要,也可以小心地使用自己的
    唤醒

是否有具有相同接口的相同库

要求我们推荐或查找工具、库或喜爱的非站点资源的问题对于堆栈溢出来说是离题的,因为它们往往会吸引固执己见的答案和垃圾邮件

顺便说一句,请不要建议服务

如果任务将运行足够长的时间,以至于
异步任务
不合适,那么根据定义,
服务
是必不可少的

因为我想在任务完成后更新我的UI

当长时间运行的任务完成时,没有什么可以阻止您更新UI。使用事件总线(
LocalBroadcastManager
,Square的Otto,greenrobot的EventBus)。或者,使用
信使


请记住,对于任何“长时间运行的任务”,当“任务完成”时,您的UI可能不再存在。

有几个选项:

1) 您也可以对长时间运行的任务使用
AsynkTask
。 如果希望一次运行多个任务,可以将AsyncTask的
executeOnExecutor(…)
方法与
THREAD\u POOL\u EXECUTOR
作为第一个参数

2)
Service
IntentService
用于异步)。 要更新UI,您可以使用
Intent
BroadcastReceiver

例如:

在活动中注册一个
BroadcastReceiver
,它将完成您的任务

在“活动”中,当您想要开始一项长任务时,只需调用
startService()
向您的
IntentService
提供
Intent,并且已经设置了操作和额外功能

IntentService
中的
onHandleIntent()
中,您可以检查操作、传入意图的额外内容,并启动所需的任务

任务完成后,您只需使用
意图调用
sendBroadcast()
,即可在活动中触发
BroadcastReceiver


就这样。如果这很困难,您应该检查意图、广播接收器和服务是如何工作的。我通常使用任务完成后通知用户界面的
服务

由于服务在UI线程上运行,长时间运行的任务的实际工作仍然必须在异步任务上完成。系统终止任务的几率比在活动中执行任务的几率要低

我通过在服务连接后使用活页夹设置来自活动的回调来实现这一点

有关将活动绑定到服务的详细信息,请参阅


只有当您的服务和活动在同一流程上时,这才有效。(这是默认设置)

AsyncTask本身有什么问题?@M.Sameer正如我在上面提到的,根据Android文档
AsyncTask
不是为长时间运行的操作而设计的。请改用
AsyncTaskLoader
。AFAIK服务通常在UI线程中运行,我不确定这种方法!是的,是的。你必须同时使用这两种方法。