gpt4 book ai didi

android - 异步任务 : doInBackground not called

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:50:11 25 4
gpt4 key购买 nike

AsyncTask 有问题。有时 doInBackground() 方法不会在 onPreExecute() 之后调用。

我知道这个问题被问过好几次,但给出的答案对我不起作用。

这是我的部分代码:

AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>(){

@Override
protected void onPreExecute() {
super.onPreExecute();
Log.e("AsyncTask", "onPreExecute");
}

@Override
protected Void doInBackground(Void... params) {
Log.e("AsyncTask", "doInBackground");
return null;
}

protected void onPostExecute(Void result) {
Log.e("AsyncTask", "onPostExecute");
};

};

if(Build.VERSION.SDK_INT >= 11)
asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else
asyncTask.execute();

如您所见,我检查 Android 版本是否为 >= HoneyComb,如果为真,则在 Pool Executor 中执行任务。即使使用该“技巧”,有时也不会调用 doInBackground()

有没有人遇到同样的问题或者知道是怎么回事?

谢谢

最佳答案

最后我找到了解决问题的方法。

我没有使用 *AsyncTask.THREAD_POOL_EXECUTOR* 来执行 asyncTask,而是用一个大的 corePoolSize 和 maximumPoolSize 来实例化我自己的 ThreadPoolExecutor:

int corePoolSize = 60;
int maximumPoolSize = 80;
int keepAliveTime = 10;

BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>(maximumPoolSize);
Executor threadPoolExecutor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS, workQueue);

还有……

asyncTask.executeOnExecutor(threadPoolExecutor);

我不知道这是否是一个很好的错误修正,但有了这个,doInBackground() 总是被调用。如您所说,我认为问题在于 *AsyncTask.THREAD_POOL_EXECUTOR* 无法管理我提供的尽可能多的 asyncTask。

谢谢大家

关于android - 异步任务 : doInBackground not called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16832376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com