2011-11-16 67 views
0

我对AsyncTask有些担心,我在阅读文档时无法弄清楚。AsyncTask对活动流程的怀疑

我的app主Activity在创建时运行几个AsyncTask。这些AsyncTask主要是从数据库下载数据或检索数据。

  1. 如果我去一个不同的活动,将创建在 这个AsyncTask这个继续执行?或者他们会停止工作,并让 任务完成一半?如果是这样,当他们回到 这个活动时他们会不知何故地继续?
  2. 为了从 启动一个运行AsyncTask的活动,我需要AsyncTask的 之一完全执行。我如何设置这个约束?你能告诉我 这个的一些示例代码吗?

感谢

回答

0

如果我去一个不同的Activity,这个AsyncTask的创建会继续执行吗?或者他们会停止工作并将任务完成一半?如果是这样,当他们回到这个活动时,他们会继续吗?

是的,它会继续运行。这可能是一把双刃剑,因为它通常会保留Activity实例,导致它超出了其回调的范围,这并不理想。如果您正在运行的任务与“活动”本身没有相同的生命周期需求,则最好放置到“服务”中。

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

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

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

HTH

0

香港专业教育学院完成使用意图和广播接收机之前,类似这样的东西。

如果您在完成异步任务时发送全局或应用程序范围的意图,那么如果您正确地构建它们,就很容易让接收者选取它。通过在将新活动推入堆栈时创建接收器,并在活动暂停时关闭接收器,总会有一个接收器用于捕获该意图,并被告知(例如:数据是从数据库)并采取行动。

如果您尝试启动需要该数据的活动,则可以在尚未找到该意图的情况下否决该活动的创建,或创建该活动并让其放置进度栏或其他活动数据完成下载,然后让它的接收器在其到达时按照意图进行操作。

希望这会有所帮助。