在我的应用程序中,一开始我必须从大约 20 个文本文件中加载数据,而且只有一次。我首先在 AsyncTask.THREAD_POOL_EXECUTOR 上使用 Asynctasks,但是每个异步任务的 KEEP_ALIVE_TIME 是一个问题,破坏了排队很长时间的异步任务。有没有办法改变这个默认的 KEEP_ALIVE_TIME?如果是这样,请告诉我。现在我已经切换到以下代码:-
public class DBLoader {
public static int completed = 0;
public static int nthreads;
Executor executor;
public DBLoader(int nthreads) {
executor = java.util.concurrent.Executors.newFixedThreadPool(nthreads);
this.nthreads = nthreads;
}
public void startThread(Thread thread){
executor.execute(thread);
}
}
我的每个线程都从原始资源中读取一个文件并将其放入本地数据库。
InputStream is = InputStreamReader(context.getResources().openRawResource(R.raw.filename));
现在,当我读取 8 个文件时,在 MOTO G1 上执行此操作大约需要 50 秒。这是 Not Acceptable 。请提出一个更好的方法来做到这一点。我正在使用 greendao 来实现本地数据库。 提前致谢。
最佳答案
静态变量THREAD_POOL_EXECUTOR
构造如下:
public static final Executor THREAD_POOL_EXECUTOR
= new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);
我不明白为什么你不能构建你自己的 ThreadPoolExecutor
并修改 KEEP_ALIVE
时间,同时复制任何私有(private)参数。
关于java - 从android中的并行线程中的大量文本文件加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34174140/