Я разрабатываю приложение, в котором мне нужно обновлять некоторую информацию каждый раз, когда пользователь входит в систему, я также использую базу данных в телефоне.Для всех этих операций (обновления, получение данных из БД и т. Д.) Я использую асинхронные задачи.До сих пор я не понимал, почему я не должен их использовать, но недавно я почувствовал, что если я выполняю некоторые операции, некоторые из моих асинхронных задач просто останавливаются при предварительном выполнении и не переходят к doInBackground.Это было слишком странно, чтобы так все и оставалось, поэтому я разработал еще одно простое приложение, чтобы проверить, что не так.И как ни странно, я получаю то же самое поведение, когда общее количество асинхронных задач достигает 5, 6-е останавливается при предварительном выполнении.
Есть ли у андроида ограничение асинхронных задач в Activity / App?Или это просто какая-то ошибка, о которой нужно сообщить?Кто-нибудь испытывал такую же проблему и, возможно, нашел обходной путь?
Вот код:
Просто создайте 5 из этих потоков для работы в фоновом режиме:
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");
}
}
А затем создайте эту тему.Он войдет в preExecute и зависнет (он не перейдет в 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");
}
}