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