gpt4 book ai didi

android - 如果 AsyncTask 不是内部类... - 一些问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:29 25 4
gpt4 key购买 nike

1) 我不明白为什么 Android 的示例几乎使用 AsyncTasks 作为私有(private)内部类。我知道将其设为内部类很方便,但它会使我们的类文件变长且难以阅读。 Shelves 示例应用程序的 ShelvesActivity 甚至有 845 行。您不认为这是糟糕的设计或糟糕的施工吗?

2) 如果我创建我的 ScanStorageTask 外部类,我必须向它传递什么?整个 Activity 还是仅使用的小部件?

示例:如果我必须在 ScanStorageTask 中使用 WebView、Button 和 ProgressBar。我用这个:

ScanStorageTask task = new ScanStorageTask(this); // "this" is activity reference, then get the webView, button, progressBar from it.

或者这个:

ScanStorageTask task = new ScanStorageTask(webView, button, progressBar);

最佳答案

在外部做这件事没有错,而且实际上可能是更好的设计。传递 UI 元素是一种紧密耦合,无论如何,当您拥有非常大的代码库时,这会给您带来麻烦。

为什么不在外部使用 UI 控件所采用的“监听器”模式呢?使您的 ScanStorageTask 成为它自己的类,创建一个带有 onComplete 方法的 OnCompleteListener 接口(interface),并将其传递给您的 ScanStorageTask 实例(公开一个 setOnCompleteListener 方法或类似的方法)。然后,onPostExecute 可以这样做:

if(onCompleteListener != null)
onCompleteListener.onComplete(data);

这样,您就可以根据数据在您的 Activity 中定义您的 UI 更新。这是更好的关注点分离,并且会减少每个类的代码行数,因为这似乎是您更喜欢的。如果您还没有这个,请创建一个类来表示您需要传入和传出的数据,这就是您作为参数传递给任务的执行方法以及 onPostExecute 传递给 onComplete 的内容。

关于android - 如果 AsyncTask 不是内部类... - 一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com