AsyncTasks nie są gromadzone, co powoduje, że inne AsyncTasks nie działają

Moja aplikacja korzysta z wielu AsyncTasks. W końcu jest to aplikacja internetowa. A kiedy śledzę zakładkę Debugowania, zauważam, że każdy AsyncTask mówi, że działa za nim, a po 5 AsyncTasks nie mogę uruchomić żadnych AsyncTasków. Naprawiłem to, zmieniając executor naTHREAD_POOL_EXECUTOR co pozwala na połączenie 15 wątków. Ale AsyncTasks nadal są wyświetlane jako działające.

Wszystkie AsyncTasks mają strumienie InputStreams i BufferedReaders w nich, aby czytać JSON, ale nigdy nie nazywamclose() metoda na streamerach i czytnikach. Czy to możliwe, czy AsyncTask zostanie zebrany po zakończeniu, bez względu na wszystko?

Jeśli to jest umowa, to dlaczego nie mogę uruchomić więcej niż 5 AsyncTasków w mojej aplikacji?

Widząc, że nałożyłem na to nagrodę, wyjaśnię to dokładniej

TheAsyncTasks wszyscy przechodzą przez ich metody. Wszystkie są zbudowane dokładnie w ten sam sposób, z wyjątkiem innychBasicNameValuePairs. Jestem w 100% pewien, że w kodzie nie ma łatwego błędu.

Oto przykład jednego z AsyncTasków:

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");
        }
    }

}

Powyższy przykład jest czasami pobierany jako szóstyAsyncTask i nigdy nie wejdzie dodoInBackground() metoda. Wierzę, że to jest 5Thread limitSERIAL_EXECUTOR. „Naprawiłem” problem, umieszczając większośćAsyncTasks wTHREAD_POOL_EXECUTOR, ale to jest po prostu unikanie.

Co może być przyczyną tegoAsyncTasks nigdy nie przestawaj biegać i zatykaćExecutor?

questionAnswers(1)

yourAnswerToTheQuestion