【发布时间】:2016-03-17 12:45:08
【问题描述】:
在我的应用程序中,我在很多地方都使用了异步任务,最近我遇到了以下异步任务的 doInBackground 没有被调用的问题,当我第三次执行以下异步任务时发生这种情况(其他异步任务也在运行)。
protected class StatusTask extends AsyncTask<Void, Void, Void> {
private final BluetoothDevice device;
public StatusTask(BluetoothDevice device) {
this.device = device;
}
@Override
protected Void doInBackground(Void... voids) {
while (true) {
if (someCondition) {
Log.D(TAG,"hi hello")
break;
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
//e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void result) {
tTask=null;
}
@Override
protected void onCancelled() {
super.onCancelled();
System.out.println("onCancelled " + this.isCancelled());
}
@Override
protected void onCancelled(Void aVoid) {
super.onCancelled(aVoid);
System.out.println("onCancelled result " + this.isCancelled());
}
}
我正在执行上述任务,
StatusTask tTask = new StatusTask(device);
tTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
我在 Android 版本 4.4.3 上运行。
如何找出我的应用程序中当前正在运行的同步任务数量? Bcz 我猜 CORE_POOL_SIZE 计数可能会导致问题。
-
或者如果发生死锁或任何其他情况并阻止执行新的异步任务,android studio 中是否有办法识别并终止其他可能无用的异步任务?
如果我使用 CustomThreadPoolExecutor 作为 disconnectTask.executeOnExecutor(mCustomThreadPoolExecutor);有了更多 CorePoolSize,它的工作正常,但下一个使用 AsyncTask.THREAD_POOL_EXECUTOR 的异步任务的 doInBackground() 没有被调用。
【问题讨论】:
标签: android multithreading android-asynctask threadpool