Tworzę aplikację, w której muszę aktualizować jakieś informacje za każdym razem, gdy użytkownik loguje się do systemu, korzystam również z bazy danych w telefonie. Do wszystkich tych operacji (aktualizacje, pobieranie danych z bazy danych itp.) Używam zadań asynchronicznych. Do tej pory nie widziałem, dlaczego nie powinienem ich używać, ale ostatnio doświadczyłem, że jeśli wykonam jakieś operacje, niektóre z moich zadań asynchronicznych po prostu zatrzymują się przed wykonaniem i nie skaczą do doInBackground. To było zbyt dziwne, żeby tak to zostawić, więc opracowałem kolejną prostą aplikację, aby sprawdzić, co jest nie tak. Co dziwne, zachowuję się tak samo, gdy liczba wszystkich zadań asynchronicznych osiąga 5, a szósta zatrzymuje się przed wykonaniem.
Czy Android ma limit asyncTasks w aktywności / aplikacji? A może to tylko jakiś błąd i należy go zgłosić? Czy ktoś napotkał ten sam problem i może znalazł sposób obejścia tego problemu?
Oto kod:
Po prostu utwórz 5 z tych wątków, aby pracować w tle:
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");
}
}
A potem utwórz ten wątek. Wejdzie do preExecute i zawiesi się (nie przejdzie do wykonania InBackground).
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");
}
}