0

我有我的MainActivity,它为用户提供了要打开的页面选择,所有这些都涉及从互联网下载一些数据并显示它。为了节省用户在选择页面时等待的时间,我制作了一个AsyncTask作为子类,在下载完成时MainActivity会生成一个对象。DATA

在以下情况下,我将如何传递DATA给:SecondActivity

  • 用户在下载完成SecondActivity之前选择。AsyncTask
  • 在用户选择SecondActivity.

到目前为止,它不必是它的AsyncTask子类,MainActivity

谢谢您的帮助!

4

3 回答 3

3

这是执行此操作的一种方法:

在Application中创建对数据的引用。Android 应用程序是存储全局数据的好地方。接下来,通过 AsyncTask 填充数据(注意使用 AsyncTask 的陷阱)。您现在可以通过类似于以下的调用访问您的数据:((MyApplication)getApplication).mydata

正如您所提到的,可能会出现两种情况。数据是否已填充。要处理此问题,请使用观察数据变化的观察者。当数据为空时,让 SecondActivity 注册为观察者。当数据可用时,您的 SecondActivity 的更新方法将被调用,您可以随心所欲地使用它。最后,确保取消注册成为观察者。希望这可以帮助。

于 2013-08-20T22:45:03.067 回答
1

只有在活动之间直接传递信息Parcellable(通过Intent)才有效。几乎可以制作任何东西,Parcellable但这并不总是一个好主意,尤其是当数据量很大时。

下一个问题是,当您的 AsyncTaskContext运行时间超过活动持续时间时,它很可能使您的第一个活动保持活动状态。当您旋转设备时,经常会重新创建 Activity 实例,而幼稚的实现往往会在新实例中启动另一个异步任务,并最终得到多个下载相同数据的任务。您需要在同一 Activity 的实例之间传递正在运行的任务的引用。

最简单的解决方案可能是创建一个可从托管& 加载数据Service的两个活动访问的单例(或 a ) 。AsyncTask如果它需要Context使用getApplicationContext(),因为在 Activites 的生命周期之外使用它是安全的。活动可以在它们处于活动状态时将自己注册为“数据加载”事件的侦听器。

于 2013-08-20T22:16:30.713 回答
0

我最近在使用 AsyncTask 时遇到了困难,并且在任务在后台运行时很难让 UI 正常运行。尽管有人评论说服务并不真正适合您所描述的那种东西,但我发现它们更容易使用。您可以将intentService视为中间立场。可以在这里找到好的 tut ,特别是关于 intentService,请点击此处。

于 2013-08-20T22:17:50.800 回答