在Android中创建用户指定的线程数

时间:2012-07-06 07:08:03

标签: java android multithreading

我正在为android做一个下载应用程序。下载部分现已成功实施并正常运行。 我需要的是按段并行下载文件。更清楚的是,如果用户指定8个段,我想创建8个线程并进行下载。 那么我将以什么方式动态创建8个线程?另外,当我为手机做这个时,我怎样才能将内存消耗保持在最低水平? 我之前没有使用过线程,所以我希望你能帮助我。感谢您的时间! :)

2 个答案:

答案 0 :(得分:5)

创建固定数量线程的最有效方法是使用ExecutorService

ExecutorService exec = Executors.newFixedThreadPool(8);

它基本上是一个固定大小的线程池,需要开发人员承担很多管理负担。

修改:所以你的流程应该是这样的:

首先,定义你的线程任务类(每个线程将执行自己任务的call方法):

class ThreadTask implements Callable<Object> {

    public Object call() {
        // execute download
        ...
        return result;
    }
}

如果要将任何参数传递给任务,请在上面的类中放置一些私有字段,并将它们传递给构造函数。此外,您可以从call返回任何类型,只需更改implements Callable<...>部分中的类型。

如果要关闭线程,请创建池并提交任务:

ExecutorService exec = Executors.newFixedThreadPool(8);
List<Future<Object>> results = new ArrayList<Future<Object>>();

// submit tasks
for(int i = 0; i < 8; i++) {
    results.add(exec.submit(new ThreadTask()));
}

...

// stop the pool from accepting new tasks
exec.shutdown();

// wait for results
for(Future<Object> result: results) {
    Object obj = result.get();
}

答案 1 :(得分:1)

看看ExecutorService,特别是Executors.newFixedThreadPool(int i),这是处理系统友好问题中线程的绝佳方法。