Android 中的自定义最大 asyncTasks
Custom max asyncTasks in Android
我正在创建一个应用程序,它需要同时执行正好 128 个任务。我读到最大值是 128,但在我的模拟器上它只能做 20。如何让他做更多或如何编辑最大异步任务?
一些信息:
API29
我用这个方法给他们打电话:
@TargetApi(11)
static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task, T... params) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
} else {
task.execute(params);
}
}
这应该可以工作,但它只能同时运行 20 个
AsyncTask.THREAD_POOL_EXECUTOR
的默认最大线程池大小是 20,这就是为什么您看不到并发执行的线程池大小。
如果你想要更大的池大小,你可以定义你自己的 Executor
:
@TargetApi(11)
static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task, T... params) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
Executor executor = new ThreadPoolExecutor(1, 128,
5, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
task.executeOnExecutor(executor, params);
} else {
task.execute(params);
}
}
我正在创建一个应用程序,它需要同时执行正好 128 个任务。我读到最大值是 128,但在我的模拟器上它只能做 20。如何让他做更多或如何编辑最大异步任务?
一些信息: API29
我用这个方法给他们打电话:
@TargetApi(11)
static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task, T... params) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
} else {
task.execute(params);
}
}
这应该可以工作,但它只能同时运行 20 个
AsyncTask.THREAD_POOL_EXECUTOR
的默认最大线程池大小是 20,这就是为什么您看不到并发执行的线程池大小。
如果你想要更大的池大小,你可以定义你自己的 Executor
:
@TargetApi(11)
static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task, T... params) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
Executor executor = new ThreadPoolExecutor(1, 128,
5, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
task.executeOnExecutor(executor, params);
} else {
task.execute(params);
}
}