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

don*_*don 2 java multithreading android

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

Tud*_*dor 5

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

ExecutorService exec = Executors.newFixedThreadPool(8);
Run Code Online (Sandbox Code Playgroud)

它基本上是一个固定大小的线程池,它承担了开发人员的大量管理负担.

编辑:所以你的流程应该是这样的:

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

class ThreadTask implements Callable<Object> {

    public Object call() {
        // execute download
        ...
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果要将任何参数传递给任务,请在上面的类中放置一些私有字段,并将它们传递给构造函数.此外,您可以从中返回任何类型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();
}
Run Code Online (Sandbox Code Playgroud)