Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 这是实现AsyncTask的最佳方法吗?还是有更好的方法?_Android_Android Asynctask - Fatal编程技术网

Android 这是实现AsyncTask的最佳方法吗?还是有更好的方法?

Android 这是实现AsyncTask的最佳方法吗?还是有更好的方法?,android,android-asynctask,Android,Android Asynctask,我正在尝试编写一个AsyncTask通用包。到目前为止,我所做的是从另一个活动调用一个活动,并将意图中的实例发送到该活动。此活动是调用AsyncLoader.execute()文件的AsyncTask的一部分。我这样做是为了不丢失父活动在布局上设置的任何数据 另一种方法是调用Intent并将数据从AsyncActivity返回到父活动。但是,这两种方法都比在父活动中实现AsyncTask慢 但是,这会弄乱代码。因此,是否有更好的实施方法 听起来,活动和异步任务之间的紧密耦合导致了一些问题,您正试

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

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


但是,这会弄乱代码。因此,是否有更好的实施方法

听起来,活动和异步任务之间的紧密耦合导致了一些问题,您正试图通过一种奇怪的解决方法来克服这些问题

根据我的经验,设计需要异步任务的活动的最佳方法是:

  • 将AsyncTask排除在活动之外,即创建一个单独的类 扩展异步任务的
    。这允许您重用异步任务
    在多个活动之间切换,使测试更容易
  • 如果需要将数据返回到活动,请使用侦听器并在活动上实现侦听器。然后将侦听器传递给创建AsyncTask的类

意图之间的数据传递应保持在最低限度,如果需要从单独的活动中重用相同的异步任务,则应按照上述步骤再次执行该任务。如果你要通过应用程序的生命周期来调用它,那么就考虑使用A代替。< /P>我通过不同的方式传递大量数据。这样做不好吗?您应该只在类之间传递简单的域对象(即只封装数据的类),而不是复杂的对象来执行任务。目的只是为了提供所需的数据,而不应该决定如何使用数据——这应该是活动的责任。个人而言,我总是考虑将ActhCaseTebug从活动中分离为一个坏的重构实践。通过这样做,最终会增加代码的复杂性(类之间的传入/传出上下文),而不会获得可重用性和可测试性的真正好处。查看我的答案,了解如何以更OO风格的方式重新分解代码。您不在类之间传递上下文,只传递侦听器,这样您的AsyncTask就不需要知道调用它的活动。不过,我仍然认为将业务逻辑与异步任务分离是一个好主意。