Autore Topic: Timeout of broadcast BroadcastRecord  (Letto 1692 volte)

Offline deborahAndroid

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero
  • Sistema operativo:
    Linux
Timeout of broadcast BroadcastRecord
« il: 30 Giugno 2011, 16:33:45 CEST »
0
Ciao a tutti,

la mia applicazione Android, genera il seguente warning:

Codice: [Seleziona]
06-30 14:43:17.863: WARN/ActivityManager(590): Timeout of broadcast BroadcastRecord{437385d8 android.intent.action.TIME_TICK} - receiver=android.app.ActivityThread$PackageInfo$ReceiverDispatcher$InnerReceiver@436d0960
06-30 14:43:18.664: WARN/ActivityManager(590): Receiver during timeout: BroadcastFilter{436d0b80 ReceiverList{436d0b08 590 system/1000 client 436d0960}}
06-30 14:43:32.533: WARN/ActivityManager(590): finishReceiver called but no pending broadcasts

Qualcuno sa indicarmi cosa significa e perchè succede????

Quest'applicazione genera molti Thread e alcuni thread richiedono un tempo d'esecuzione abbastanza lungo!

Grazie in anticipo

Deborah

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7

Offline deborahAndroid

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero
  • Sistema operativo:
    Linux
Re:Timeout of broadcast BroadcastRecord
« Risposta #2 il: 01 Luglio 2011, 09:21:55 CEST »
0
Ciao  MarcoDuff!! Grazie per la tua indicazione.
Non ho ben capito però come devo modificare la mia applicazione. Ti spiego meglio quello che fa!
La mia applicazione non richiede interazione con l'utente. Una volta lanciata esegue algoritmi di data mining molto pesanti. Questi algoritmi eseguono ciascuno in un thread separato.
La cosa strana è che eseguo la medesima applicazione su 5 macchine differenti ma solo una mi da questo problema!
Nessuna finestra di dialogo  ANR mi appare :(((
HELP

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Timeout of broadcast BroadcastRecord
« Risposta #3 il: 01 Luglio 2011, 09:51:26 CEST »
0
Se è un service non hai un ANR ma un bloccco e basta. Sicuro che apri un nuovo thread e non usi quello del broadcast?

Posta il codice.

Offline deborahAndroid

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero
  • Sistema operativo:
    Linux
Re:Timeout of broadcast BroadcastRecord
« Risposta #4 il: 01 Luglio 2011, 11:18:16 CEST »
0
Codice: [Seleziona]
public void startTask(Task t) {
               
                owner.updateEnergyComputation(t.getName(), t.getDatasetSize());
               
                String task = t.getName() + " > " + t.getDataset() + " richiesto da " + t.getRequestorNode() + ":" + t.getRequestorPort() + " ";
               
                owner.write(Utility.currentTime() + " [SCHEDULER] : startTask(Task t) --> avvio il task " + t.getName() + " > " + t.getDataset() + " richiesto da " + t.getRequestorNode() + ":" + t.getRequestorPort());
                System.out.println(Utility.currentTime() + " [SCHEDULER] : startTask(Task t) --> avvio il task " + t.getName() + " > " + t.getDataset() + " richiesto da " + t.getRequestorNode() + ":" + t.getRequestorPort());
                               
                l.lock();
                try{
                        waitingQueue.addLast(t);
                        System.out.println("..... W A I T I N G   Q U E U E ..... >>>> " + waitingQueue);
                        while(!canExecute(t)){
                                processoreOccupato.await();
                                System.out.println("..... W A I T ..... >>>> " +t.getName()+" -- "+t.getRequestorPort());
                        }
                        waitingQueue.removeFirst();

                        if(this.costEstimator.hasSkill(t.getName(), t.getDatasetSize())){
                               
                                owner.write(Utility.currentTime() + " [SCHEDULER] : startTask(Task t) --> ..... C H E C K  P O S I T I V O ..... >>>> " + task);
                                System.out.println(Utility.currentTime() + " [SCHEDULER] : startTask(Task t) --> ..... C H E C K  P O S I T I V O ..... >>>> " + task);
                               
                                t.setEas(owner.getEas());
                                String model = t.perform();
                               
                                owner.updateRealEnergyComputation(t.getName(), t.getDatasetSize());
                               
                                owner.write(Utility.currentTime() + " [SCHEDULER] : startTask(Task t) --> ..... M O D E L ..... >>>> " + model);
                                System.out.println(Utility.currentTime() + " [SCHEDULER] : startTask(Task t) --> ..... M O D E L ..... >>>> " + model);
                               
                                if(!(owner.getAddress().equals(t.getRequestorNode()) && owner.getPort() == t.getRequestorPort())){
                                        owner.write(Utility.currentTime() + " [SCHEDULER] : startTask(Task t) --> ..... D O N E ..... >>>> "+ task +"\n la RESIDUEL LIFE dopo l'esecuzione = "+resourceMonitoring.getRealResidualLife());
                                        System.out.println(Utility.currentTime() + " [SCHEDULER] : startTask(Task t) --> ..... D O N E ..... >>>> "+ task +"\n la RESIDUEL LIFE dopo l'esecuzione = "+resourceMonitoring.getRealResidualLife());       
                                }
                                sendModel(t, model);
                        }else{
                                owner.write(Utility.currentTime() + " [SCHEDULER] : startTask(Task t) --> ..... C H E C K  N E G A T I V O ..... >>>> " + t.getName()+" -- "+t.getRequestorPort());
                                System.out.println(Utility.currentTime() + " [SCHEDULER] : startTask(Task t) --> ..... C H E C K  N E G A T I V O ..... >>>> " + t.getName()+" -- "+t.getRequestorPort());
                               
                                this.execute(t);
                        }
                        processoreOccupato.signalAll();
                }catch (InterruptedException e) {
                        e.printStackTrace();
                }
                finally{
                        l.unlock();
                }
        }

Ecco il codice.

Io non ho nessun Service. Ho l'Activity principale che mi serve per inizializzare alcuni parametri utili all'applicazione. Dopo di che parte un thread (ServerSocket) che rimane in ascolto di richieste di esecuzione di task. Ogni volta che il ServerSocket riceve una richiesta di esecuzione di un task di data mining:

- crea e avvia un nuovo thread

- il thread creato invoca questo metodo (di una classe condivisa Nodo)

- questo metodo avvia l'esecuzione del task di data mining
Codice: [Seleziona]
String model = t.perform(); che richiede circa due ora per essere eseguito.

Quello che io non mi spiego è perchè questo problema si verifica solo su una macchina che è anche quella con minori prestazioni in termini di cpu e memoria! Secondo te è una combinazione o potrebbe essere una motivazione?

Grazie mille!


Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Timeout of broadcast BroadcastRecord
« Risposta #5 il: 01 Luglio 2011, 12:28:07 CEST »
0
Se crei un nuovo thread e non usi i broadcast receiver non capisco l'errore segnalato sul logcat...

Offline deborahAndroid

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero
  • Sistema operativo:
    Linux
Re:Timeout of broadcast BroadcastRecord
« Risposta #6 il: 01 Luglio 2011, 12:30:25 CEST »
0
ecco...infatti non lo capisco neanche io!  :-(

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Timeout of broadcast BroadcastRecord
« Risposta #7 il: 01 Luglio 2011, 12:40:24 CEST »
0
tanto per togliere tutti i dubbi, visto che quelli segnalati sul logcat sono dei warning, ci sono altri errori prima o dopo?

Posteresti anche il logcat completo dall'esecuzione di uno dei thread fino alla chiusura?

Offline deborahAndroid

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero
  • Sistema operativo:
    Linux
Re:Timeout of broadcast BroadcastRecord
« Risposta #8 il: 01 Luglio 2011, 12:46:34 CEST »
0
Purtroppo non ho salvato l'intero log.

Non ci sono altri errori ne warning, infatti l'applicazione (Thread main) continua a funzionare alla perfezione. Però non mi restituisce il risultato dei task di data mining. Continua per ore a liberare spazio nell'heap, infatti stampa ripetutamente stringhe come:

Codice: [Seleziona]
GC freed 19997 objects / 2451241 bytes in 102 sec

Quello che ho osservato è la frequentissima stampa di questa stringa:

Codice: [Seleziona]
threadid=17: bogus mon 1+0>0; adjusting
« Ultima modifica: 01 Luglio 2011, 12:52:42 CEST da deborahAndroid »

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:Timeout of broadcast BroadcastRecord
« Risposta #9 il: 01 Luglio 2011, 14:06:36 CEST »
0
Quello che io non mi spiego è perchè questo problema si verifica solo su una macchina che è anche quella con minori prestazioni in termini di cpu e memoria! Secondo te è una combinazione o potrebbe essere una motivazione?

Potrebbe valer la pena fare una versione di prova della tua app, in cui le operazioni di datamining sono rese volutamente semplici (peso virtualmente nullo sulla macchina), così da vedere se è il carico di lavoro a causare queste anomalie. Può addirittura essere comodo predisporre un modo per provare artificialmente carichi via via più pesanti per vedere quando cominciano a verificarsi le anomalie.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline deborahAndroid

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero
  • Sistema operativo:
    Linux
Re:Timeout of broadcast BroadcastRecord
« Risposta #10 il: 02 Luglio 2011, 15:00:48 CEST »
0
In realtà questa prova l'ho già fatta perchè prima di lanciare l'applicazione con questo carico di lavoro, l'avevo fatto considerando un carico di lavoro inferiore e tutto funzionava bene!
Grazie cmq!