java - 优雅的解决方案?

标签 java android parallel-processing

优雅的解决方案

大家好。 我目前正在开发一个项目,我正在考虑一个优雅的实现解决方案,我厌倦了即兴的解决方案。

让我尝试向您解释我的“问题”:

我的应用程序这部分的任务非常简单:

我希望我的应用程序下载一些内容并在后台处理下载的文件,同时显示 ProgressDialog。之后,内容应以字符串列表形式返回,并在某些 ListActivity 中显示。到目前为止,没什么大不了的:

下载器和处理内容是 AsyncTask 的子类,并在与主 Activity 不同的类中调用。但现在我的问题是:

在哪里调用进度对话框? GUI 线程如何与 ProgressDialog “ react ”?我应该从处理类中调用 ProgressDialog 还是最好“阻止”主类,等待通知?

问候

燃烧的灵魂

最佳答案

blindstuffs anwser 正在朝着正确的方向发展,尽管我不会使用处理程序来处理更新进度。 AsyncTask 有他自己的函数来处理这个问题,恕我直言,这些函数更容易使用并且更适合 AsyncTask 类

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
    protected Long doInBackground(URL... urls) {
    int count = urls.length;
    long totalSize = 0;
    for (int i = 0; i < count; i++) {
        totalSize += Downloader.downloadFile(urls[i]);
        publishProgress((int) ((i / (float) count) * 100));
    }
    return totalSize;
    }

    protected void onProgressUpdate(Integer... progress) {
        setProgressPercent(progress[0]);
    }

    protected void onPostExecute(Long result) {
        showDialog("Downloaded " + result + " bytes");
    }
}

这个例子取自official Android SDK documentation 。使用 publishProgress 的优点是您可以传递多个值,具体取决于传递到 doInBackground 的参数数量(即,如果您下载的文件超过 1 个)。

关于java - 优雅的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4016149/

相关文章:

java - Java 的 Arrays.asList() 是否违反了 OOP?

java - 消灭敌人的有效方法

android - 如何处理 pygame 中的暂停/恢复方法?

c# - 使用线程 C#

python - 全局变量在Python并行编程中如何工作?

java - 在java中以HTML显示表格

java - ReentrantLock.tryLock() 没有锁定

java - 如何解决 put(String,long) 找不到合适的方法

python - 依赖于 Python 的并行任务处理并发,例如 GNU Make

java - 什么是使用 Stax 解析 DOM 的解析器?