我对AsyncTask有些担心,在阅读文档时我无法澄清。
我的应用程序主Activity在创建时会运行几个AsyncTask。这些AsyncTask主要下载数据或从数据库中检索数据。
由于
答案 0 :(得分:0)
在使用Intent和Broadcast Receivers之前,我做过类似的事情。
如果您完成Async任务以发送全局或应用程序范围的意图,那么如果您正确构建它们,接收器就很容易接受它。通过在将新活动推入堆栈时创建接收器,并在活动暂停时使接收器关闭,将始终有一个接收器来获取意图并被告知(例如:数据从db)并采取行动。
如果您尝试启动需要该数据的活动,则可以拒绝创建该活动(如果尚未找到该意图),或者创建活动并让其设置进度条或其他内容数据完成下载,然后让其接收者在到达时对其进行操作。
希望这有帮助。
答案 1 :(得分:0)
如果我去另一个Activity,那么在这个上创建的AsyncTask会继续执行吗?或者他们会停止工作并将任务完成一半吗?如果是这样,他们会在回到此活动时以某种方式继续吗?
是的,它会继续运行。这可能是一把双刃剑,因为它通常也会保留在Activity实例上,导致它超出其onDestroy()
回调,这是不理想的。如果您运行的任务与Activity本身没有相同的生命周期需求,则最好将其置于服务中。
为了从运行AsyncTask的活动中启动其中一个活动,我需要完全执行其中一个AsyncTask。如何设置此约束?你能告诉我一些这方面的示例代码吗?
有很多方法可以做到这一点,很多方法取决于应用程序的体系结构,提供特定的示例代码......但这里有一些更高层次的想法。由于AsyncTask在任务执行完成时在主线程(onPostExecute
)上提供了一个简单的回调方法,因此您可以在该点设置一个标志。或者只是简单地检查AsyncTask从将启动Activity的任何代码中检索的任何数据的存在。同样,服务将为此提供良好的上下文,因为多个活动可以连接到服务并在继续之前检查任务状态。
根据您的应用程序,另一个选项是将任务的结果转储到ContentProvider中。 ContentProviders包含一个很好的界面,用于在不诉诸全局广播意图的情况下通知观察者变化。
HTH