【问题标题】:Is this the best way to implement AsyncTask? Or are there better ways?这是实现 AsyncTask 的最佳方式吗?还是有更好的方法?
【发布时间】:2012-03-04 06:35:51
【问题描述】:

我正在尝试编写 AsyncTask 通用包。到目前为止,我所做的是从另一个活动中调用一个活动,将 Intent 中的实例发送到该活动。此活动是调用 AsyncLoader.execute() 文件的 AsyncTask 的一部分。我这样做是为了不会丢失父 Activity 在布局上设置的任何数据。

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

但是,这会使代码混乱。那么,有没有更好的实现方式呢?

【问题讨论】:

    标签: android android-asynctask


    【解决方案1】:

    听起来你在 Activity 和 AsyncTask 之间的紧密耦合导致了你试图通过一种奇怪的解决方法来克服的问题。

    根据我的经验,设计需要 AsyncTask 的活动的最佳方式是:

    • 让您的 AsyncTask 远离您的活动,即创建一个单独的类 那extends AsyncTask。这允许您重用 AsyncTask 多个活动之间,并使其更容易测试。
    • 如果您需要将数据返回给您的活动,请使用侦听器并在您的活动上实现该侦听器。然后将您的侦听器传递给创建 AsyncTask 的类。

    应尽量减少 Intent 之间的数据传递,如果您需要从单独的 Activity 重用相同的 AsyncTask,则应按照上述步骤再次执行该任务。如果您要在应用的整个生命周期中调用它,请考虑改用 service

    【讨论】:

    • 我以各种其他方式在 Intent 之间传递大量数据。这是一种不好的做法吗?
    • 你应该只在类之间传递简单的域对象(即只封装数据的类)而不是复杂的对象来执行任务。目的只是提供所需的数据,但不应该决定如何使用数据——这应该是活动的责任。
    • 就我个人而言,我总是认为将 AsyncTask 从 Activity 中分离出来是一种不好的重构实践。通过这样做,您最终会增加代码的复杂性(在类之间传入/传出上下文),而没有获得可重用性和可测试性的真正好处。查看我的回答 here,了解如何以更 OO 风格的方式重构代码。
    • 你没有在类之间传递上下文,只有监听器,所以你的 AsyncTask 不需要知道调用它的活动。不过,我仍然认为将您的业务逻辑与 AsyncTask 分开是个好主意。
    猜你喜欢
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    相关资源
    最近更新 更多