AsyncTask对活动流程的疑虑

时间:2011-11-16 23:43:26

标签: android android-asynctask

我对AsyncTask有些担心,在阅读文档时我无法澄清。

我的应用程序主Activity在创建时会运行几个AsyncTask。这些AsyncTask主要下载数据或从数据库中检索数据。

  1. 如果我去另一个Activity,是否会创建AsyncTask 这一个继续执行?或者他们会停止工作并离开 任务完成了一半?如果是这样的话,他们回到时会以某种方式继续下去 这个活动?
  2. 为了从中开始其中一项活动     一个正在运行AsyncTask的,我需要一个AsyncTask     完全执行。如何设置此约束?你能表现出来吗?     请给我一些示例代码吗?
  3. 由于

2 个答案:

答案 0 :(得分:0)

在使用Intent和Broadcast Receivers之前,我做过类似的事情。

如果您完成Async任务以发送全局或应用程序范围的意图,那么如果您正确构建它们,接收器就很容易接受它。通过在将新活动推入堆栈时创建接收器,并在活动暂停时使接收器关闭,将始终有一个接收器来获取意图并被告知(例如:数据从db)并采取行动。

如果您尝试启动需要该数据的活动,则可以拒绝创建该活动(如果尚未找到该意图),或者创建活动并让其设置进度条或其他内容数据完成下载,然后让其接收者在到达时对其进行操作。

希望这有帮助。

答案 1 :(得分:0)

  

如果我去另一个Activity,那么在这个上创建的AsyncTask会继续执行吗?或者他们会停止工作并将任务完成一半吗?如果是这样,他们会在回到此活动时以某种方式继续吗?

是的,它会继续运行。这可能是一把双刃剑,因为它通常也会保留在Activity实例上,导致它超出其onDestroy()回调,这是不理想的。如果您运行的任务与Activity本身没有相同的生命周期需求,则最好将其置于服务中。

  

为了从运行AsyncTask的活动中启动其中一个活动,我需要完全执行其中一个AsyncTask。如何设置此约束?你能告诉我一些这方面的示例代码吗?

有很多方法可以做到这一点,很多方法取决于应用程序的体系结构,提供特定的示例代码......但这里有一些更高层次的想法。由于AsyncTask在任务执行完成时在主线程(onPostExecute)上提供了一个简单的回调方法,因此您可以在该点设置一个标志。或者只是简单地检查AsyncTask从将启动Activity的任何代码中检索的任何数据的存在。同样,服务将为此提供良好的上下文,因为多个活动可以连接到服务并在继续之前检查任务状态。

根据您的应用程序,另一个选项是将任务的结果转储到ContentProvider中。 ContentProviders包含一个很好的界面,用于在不诉诸全局广播意图的情况下通知观察者变化。

HTH