2012-03-03 104 views
2

我正在尝试编写一个AsyncTask通用包。直到现在,我所做的是从另一个调用一个活动,将Intent中的实例发送到该活动。此活动是调用AsyncLoader.execute()文件的AsyncTask的一部分。我正在这样做,以便我不会丢失父Activity在布局上设置的任何数据。这是实现AsyncTask的最佳方式吗?或者有更好的方法吗?

另一种方法是调用Intent并将数据从AsyncActivity返回给父活动。但是,这两种方法都比在父活动中实施AsyncTask慢。

但是,这混乱了代码。那么,有没有更好的实施方式?

回答

3

这听起来像你的活动和AsyncTask之间的紧密耦合导致你尝试用奇怪的解决方法克服的问题。

在我的经验,最好的方式来设计需要的是的AsyncTask活动:

  • 保持你的AsyncTask您的活动,即让一个单独的类 该extends AsyncTask。这使您可以在多个活动之间重复使用AsyncTask ,并使测试更加容易。
  • 如果您需要将数据返回给您的活动,请使用侦听器并在您的活动中实施侦听器。然后将你的监听器传给一个创建AsyncTask的类。

意图之间的数据传递应该保持在最低限度,如果您需要从单独的活动中重复使用相同的AsyncTask,则应遵循上述步骤并再次执行任务。如果您打算在应用的整个生命周期中调用此功能,请考虑使用service

+0

我同意这是一个可怕的工作。 – Hick 2012-03-03 17:38:47

+0

我以各种其他方式在Intents中传递大量数据。这是否是一种糟糕的做法? – Hick 2012-03-03 17:42:10

+0

你应该只在类之间传递简单的域对象(即只是封装数据的类)而不是复杂的对象来执行任务。目的是为了提供所需的数据,但不应该决定如何使用数据 - 这应该是活动的责任。 – 2012-03-03 17:53:19