Estou desenvolvendo um aplicativo onde preciso atualizar algumas informações toda vez que o usuário faz login no sistema, também uso banco de dados no telefone. Para todas essas operações (atualizações, recuperação de dados do banco de dados e etc.) eu uso tarefas assíncronas. Até agora, não vi por que não deveria usá-los, mas recentemente percebi que se eu fizer algumas operações, algumas das minhas tarefas assíncronas simplesmente param na pré-execução e não vão para doInBackground. Era muito estranho deixar assim, então desenvolvi outro aplicativo simples apenas para verificar o que estava errado. E por estranho que pareça, obtenho o mesmo comportamento quando a contagem do total de tarefas assíncronas atinge 5, a 6ª para na pré-execução.
O Android tem um limite de asyncTasks em Activity / App? Ou é apenas um bug e deve ser relatado? Alguém teve o mesmo problema e talvez tenha encontrado uma solução alternativa?
Aqui está o código:
Basta criar 5 desses tópicos para trabalhar em segundo plano:
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 então crie este tópico. Ele entrará em preExecute e travará (não irá para 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");
}
}