像AsyncTask这样的长期运行任务库

时间:2014-02-09 19:33:01

标签: java android android-asynctask

我在我的android应用程序中使用AsyncTask进行短操作任务,现在我想为Long-Running任务实现相同的功能 - 是否有相同的接口具有相同的库?

BTW请不要建议Service,因为我想在任务完成后更新我的UI!

任何建议都将不胜感激!

3 个答案:

答案 0 :(得分:2)

  

现在我想为Long-Running任务实现相同的功能

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

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

  • 如果它超过一秒但少于15秒,请使用IntentService

  • 如果它超过15秒,但会在更长的秒数后自行结束,请使用我的WakefulIntentServiceWakefulBroadcastReceiverIntentService。这些是在工作进行时帮助保持设备清醒的必要条件。

  • 如果只有当用户表明它应该结束时才会结束(例如,通过按下用户界面中的某个“停止”按钮),请使用由常规Thread管理的Service 1}},如果需要,也许还要小心使用你自己的WakeLock

  

是否有相同的库具有相同的界面?

要求我们推荐或找到工具,库或最喜欢的场外资源的问题是Stack Overflow的主题,因为它们往往会吸引固执己见的答案和垃圾邮件。

  BTW请不要建议服务

如果任务运行的时间足够长,AsyncTask不合适,那么根据定义,Service是必不可少的。

  

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

当长时间运行的任务完成时,没有什么能阻止您更新UI。使用活动巴士(LocalBroadcastManager,Square's Otto,greenrobot的EventBus)。或者,使用Messenger

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

答案 1 :(得分:2)

我通常使用Service在任务完成后通知用户界面。

在UI线程上运行Service时,仍需要在AsyncTask上完成长时间运行任务的实际工作。系统终止任务的可能性比在Activity上工作的几率要低。

我是通过在服务连接后使用活页夹设置Activity的回调来实现的。

有关将Activity绑定到服务的详细信息,请参阅http://developer.android.com/guide/components/bound-services.html

仅当您的服务和活动位于同一进程时,此方法才有效。 (这是默认设置)

答案 2 :(得分:0)

有几种选择:

1)您也可以将AsynkTask用于长时间运行的任务。 如果您希望一次运行多个任务,可以使用AsyncTask的executeOnExecutor(...)方法和THREAD_POOL_EXECUTOR作为第一个参数

2)ServiceIntentService用于异步)。 要更新用户界面,您可以使用Intent& BroadcastReceiver个班级。

示例:

在您的活动中注册一个BroadcastReceiver,让您的任务完成回调

在您希望开始执行长任务的活动中,只需致电startService(),然后通过IntentIntentService提供IntentService行动&已经设置了附加功能。

onHandleIntent() sendBroadcast()中,您可以检查操作,传入意图的额外内容并启动您想要的任务。

任务完成后,您只需使用Intent拨打BroadcastReceiver即可在您的活动中触发{{1}}

就是这样。如果这很困难,你应该看看Intents,BroadcastReceivers&服务工作