understanding parallel Async Task in Android
In meiner Anwendung verwende ich an vielen Stellen Async-Aufgaben. In letzter Zeit habe ich ein Problem damit, dass doInBackground für die unten stehende Async-Aufgabe nicht aufgerufen wird. Dies geschieht, wenn ich die unten stehende Async-Aufgabe zum dritten Mal ausführe (andere Async-Aufgaben sind ebenfalls vorhanden) Laufen)
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());
}
}
Ich führe die obige Aufgabe aus als,
StatusTask tTask = new StatusTask(device);
tTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
Ich arbeite mit Android Version 4.4.3.
Wie erfahre ich, wie viele Synchronisierungsaufgaben zurzeit in meiner App ausgeführt werden? Bcz Ich denke, die Anzahl CORE_POOL_SIZE könnte das Problem verursachen.
Oder wenn ein Deadlock oder eine andere Situation eintritt und die Ausführung einer neuen Async-Aufgabe blockiert wird, gibt es in Android Studio eine Möglichkeit, die anderen möglicherweise nicht nützlichen Async-Aufgaben zu identifizieren und zu beenden?
Wenn ich CustomThreadPoolExecutor als disconnectTask.executeOnExecutor (mCustomThreadPoolExecutor) verwende; mit mehr CorePoolSize funktioniert es gut, aber doInBackground () der nächsten Async-Task, die AsyncTask.THREAD_POOL_EXECUTOR verwendet, wird nicht aufgerufen.