Sto sviluppando un'applicazione in cui devo aggiornare alcune informazioni ogni volta che l'utente accede al sistema, utilizzo anche il database nel telefono. Per tutte quelle operazioni (aggiornamenti, recupero di dati da db e così via) utilizzo attività asincrone. Fino ad ora non vedevo perché non dovrei usarli, ma recentemente ho riscontrato che se eseguo alcune operazioni alcune delle mie attività asincrone si fermano semplicemente in pre-esecuzione e non passano a doInBackground. Era troppo strano per lasciarlo così, quindi ho sviluppato un'altra semplice applicazione solo per verificare cosa c'è che non va. E abbastanza strano, ottengo lo stesso comportamento quando il conteggio delle attività asincrone totali raggiunge 5, il sesto si ferma in pre-esecuzione.
Android ha un limite di asyncTask su attività / app? O è solo un bug e dovrebbe essere segnalato? Qualcuno ha riscontrato lo stesso problema e forse ha trovato una soluzione alternativa?
Ecco il codice:
Crea semplicemente 5 di questi thread per lavorare in background:
private class LongAsync extends AsyncTask<String, Void, String>
{
@Override
protected void onPreExecute()
{
Log.d("TestBug","onPreExecute");
isRunning = true;
}
@Override
protected String doInBackground(String... params)
{
Log.d("TestBug","doInBackground");
while (isRunning)
{
}
return null;
}
@Override
protected void onPostExecute(String result)
{
Log.d("TestBug","onPostExecute");
}
}
E poi crea questo thread. Entrerà in preExecute e si bloccherà (non andrà a doInBackground).
private class TestBug extends AsyncTask<String, Void, String>
{
@Override
protected void onPreExecute()
{
Log.d("TestBug","onPreExecute");
waiting = new ProgressDialog(TestActivity.this);
waiting.setMessage("Loading data");
waiting.setIndeterminate(true);
waiting.setCancelable(true);
waiting.show();
}
@Override
protected String doInBackground(String... params)
{
Log.d("TestBug","doInBackground");
return null;
}
@Override
protected void onPostExecute(String result)
{
waiting.cancel();
Log.d("TestBug","onPostExecute");
}
}