AsyncTasks не собираются, в результате чего другие AsyncTasks не запускаются
Мое приложение использует много AsyncTasks. Это веб-приложение в конце концов. И когда я отслеживаю вкладку «Отладка», я замечаю, что каждый AsyncTask говорит, что работает за ней, и после 5 AsyncTasks я не могу запустить любые AsyncTask. Я исправил это, изменив исполнителя наTHREAD_POOL_EXECUTOR
что позволяет объединять 15 потоков. Но AsyncTasks по-прежнему показывают, как работает.
Все AsyncTasks содержат InputStreams и BufferedReaders для чтения JSON, но я никогда не вызываюclose()
метод на Стримеры и Читатели. Может ли это быть так, или AsyncTask будет собираться после того, как он завершится, несмотря ни на что?
Если это так, то почему я не могу запустить более 5 AsyncTasks в своем приложении?
Seeing as I put a bounty on it, I will explain this more explicitlyAsyncTasks
все проходят через свои методы. Все они построены одинаково точно, за исключением разныхBasicNameValuePairs
, Я на 100% уверен, что в коде нет простой ошибки.
Вот пример одного из AsyncTasks:
private class RunningEvent extends AsyncTask<Void, Void, Response> {
@Override
protected void onPreExecute() {
if (Constants.isOnline(getApplicationContext())) {
super.onPreExecute();
} else {
Toast.makeText(getApplicationContext(),
"No internet connection", Toast.LENGTH_LONG).show();
return;
}
}
@Override
protected Response doInBackground(Void... empty) {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(URL);
try {
List<NameValuePair> values = new ArrayList<NameValuePair>(5);
values.add(new BasicNameValuePair("tag", "eventRunning"));
values.add(new BasicNameValuePair("userid", String
.valueOf(response.user.userid)));
post.setEntity(new UrlEncodedFormEntity(values));
HttpResponse httpresponse = client.execute(post);
HttpEntity entity = httpresponse.getEntity();
InputStream stream = entity.getContent();
Log.i("MenuActivity",
"Input streamed, parsing Gson for existing events");
Gson gson = new Gson();
Reader reader = new InputStreamReader(stream);
eventresponse = gson.fromJson(reader, Response.class);
return eventresponse;
} catch (Exception e) {
e.printStackTrace();
Log.e("RunningEvent", "Error sending data to Server");
}
return null;
}
@Override
protected void onPostExecute(Response result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.i("MenuActivity", "Binding button");
if (eventresponse != null) {
if (eventresponse.success == 1) {
eventresponse.user = response.user;
bActivity.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent i = new Intent("com.xxx.xxx.EVENT");
i.putExtra("response", eventresponse);
running = false;
switcher.cancel(true);
MenuActivity.this.finish();
startActivity(i);
}
});
} else {
bActivity.setText("Nieuw activity");
bActivity.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent i = new Intent("com.xxx.xxx.NEWEVENT");
i.putExtra("response", response);
running = false;
switcher.cancel(true);
MenuActivity.this.finish();
startActivity(i);
}
});
}
} else {
Log.i("RunningEvent", "Response is null");
}
}
}
Пример выше, иногда запускается как 6-йAsyncTask
и он никогда не войдет вdoInBackground()
метод. Я считаю, что это 5Thread
пределSERIAL_EXECUTOR
, Я "исправил" проблема, поставив большинствоAsyncTasks
вTHREAD_POOL_EXECUTOR
, но это всего лишь избегает этого.
Что может быть причиной того, что этиAsyncTasks
никогда не прекращайте бегать и забиватьExecutor
?