Autore Topic: Problema Async Tack: AppData::create pipe(2) failed: Too many open files  (Letto 829 volte)

Offline monello

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus7
Ciao a tutti,

vi spiego il problema che sto riscontrando:

in una schermata della mia applicazione ho implementato un meccanismo per aggiornare quasi in tempo reale i dati di una listview leggendoli da un webservice.
Per fare questo mi sono creato la mia classe AsyncTask che effettua la chiamata e, nell'onPostExecute, aggiorna i dati della listView.
Dopo averli aggiornati, dal Thread dell'activity richiamo nuovamente l'AsynchTask, creando a tutti gli effetti un loop volontario.

Il meccanismo funziona bene, ma dura pochi minuti. Dopo circa 3/4 minuti, il tutto si frizza e nella console compare l'errore AppData::create pipe(2) failed: Too many open files

Ho cercato in rete è mi sembra di capire che sia un problema legato ai Thread aperti. Ad ogni task il sistema sembra che crei un file per la gestione del task stesso (se non ho capito male) e quando ce ne sono troppi, può succedere di incappare nell'errore che vi ho segnalato.
Io praticamente apro 1 task ogni secondo, ma ho provato anche a farlo per 2/3 o più secondi. Il problema semplicemente si verifica più tardi, ma si verifica comunque sempre.

C'è un modo particolare di gestire la situazione che vi ho descritto?
Io sto provando i vari parametri dell'execute

myAsyncTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
oppure
myAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

ma in nessun modo riesco a risolvere il problema.

Se avete suggerimenti rispondete

Grazie

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema Async Tack: AppData::create pipe(2) failed: Too many open files
« Risposta #1 il: 04 Luglio 2013, 11:05:31 CEST »
0
L'asynctask non crea thread indefinitamente, usa a rotazione i thread di un pool.

Il problema potrebbe essere un leak in un altro punto del codice dell'asynctask. Puoi postarlo, magari con il logcat dell'errore?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline monello

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus7
Re:Problema Async Tack: AppData::create pipe(2) failed: Too many open files
« Risposta #2 il: 04 Luglio 2013, 11:19:31 CEST »
0
L'asynctask non crea thread indefinitamente, usa a rotazione i thread di un pool.

Il problema potrebbe essere un leak in un altro punto del codice dell'asynctask. Puoi postarlo, magari con il logcat dell'errore?


Nel Logcat compare l'errore che ho già riportato:
AppData::create pipe(2) failed: Too many open files

Ma l'applicazione non va in chrash, semplicemente il mio AsynchTask smette di essere eseguito dopo 3/4 minuti e dopo che compare questo errore.
Sto provando a forzare il Cancelled del task dopo ogni esecuzione
myAsynchTask.cancel(true);

ma sto notando che stranamente il metodo onCancelled() del mio task viene richiamato solo la prima volta.

Per ora sono in alto mare, non so come risolvere.
Se avete idee.....

Grazie




Post unito: 04 Luglio 2013, 11:21:50 CEST
Il problema potrebbe essere un leak in un altro punto del codice dell'asynctask. Puoi postarlo, magari con il logcat dell'errore?

Potrebbe essere, dato il codice dell'AsyncTask legge da WebService tramite la libreria ksoap2.
Può essere che ad ogni chiamata erroneamente istanzi una nuova connessione?
Come posso prevenire questa cosa?

Post unito: 04 Luglio 2013, 14:18:23 CEST
Bhooo, sto provando a ripetere il loop di execute del mio Thread senza fargli fare nessuna chiamata al web service con ksoap2 e sembra che tutto funzioni.

Quindi creo non sia colpa del pool con il quale gestisco i Thread.

C'è forse qualcosa da pulire come connessione, oppure può essere che l'errore sia generato dal server web?
Dopo che mi compare l'errore Too many open File, ho visto che il mio codice si pianta sulla successiva chiamata al ws che avviene tramite ssl (SSL Exception).

Se avete suggerimenti sono apprezzati

Grazie
« Ultima modifica: 04 Luglio 2013, 14:18:23 CEST da monello, Reason: Merged DoublePost »