2010-08-02 13 views
14

Ho un servizio che crea una notifica e quindi aggiorna periodicamente con determinate informazioni. Dopo circa 12 minuti circa il telefono si blocca e si riavvia, credo che sia causato da una perdita di memoria nel codice seguente da fare con il modo in cui sto aggiornando la notifica, qualcuno potrebbe controllare/avvisarmi se questo è il caso e cosa sto sbagliando.perdita di memoria Android nel servizio di notifica

onCreate:

mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 

createNotification:

private void createNotification() { 
    Intent contentIntent = new Intent(this,MainScreen.class); 
    contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent appIntent =PendingIntent.getActivity(this,0, contentIntent, 0); 

    contentView = new RemoteViews(getPackageName(), R.layout.notification); 
    contentView.setImageViewResource(R.id.image, R.drawable.icon); 
    contentView.setTextViewText(R.id.text, ""); 

    notification = new Notification(); 
    notification.when=System.currentTimeMillis(); 
    notification.contentView = contentView; 
    notification.contentIntent = appIntent; 
} 

updateNotification:

private void updateNotification(String text){ 
    contentView.setTextViewText(R.id.text, text); 
    mNotificationManager.notify(0, notification); 
} 

Grazie in anticipo.

+0

si prega di inviare alcuni dei Logcat destra prima del riavvio – smith324

+0

E 'solo GC sempre più grande fino a causare problemi e comincia roba uccidendo e riavvia – stealthcopter

+0

Assicurarsi che è di sicuro la vostra applicazione. Prova a disinstallarlo completamente e verifica se succede ancora. Potrebbe essere qualche altra app che hai installato di recente. – Moncader

risposta

9

Mi sono imbattuto nello stesso problema. Sembra che se non "cache" RemoteView e notifica nel servizio, ma ricreare da zero nella routine di "aggiornamento" questo problema scompare. Sì, lo so che non è efficiente, ma almeno il telefono non si riavvia da errori di memoria insufficienti.

+0

Hmmm strano, proverò questo dopo le vacanze per confermare. – stealthcopter

+0

Questo sembra funzionare, per quanto posso dire. – Timmmm

+0

Ciao, sto aggiornando la vista remota di una notifica (con precisione 3 immagini testuali al suo interno) continuamente (dopo ogni secondo) utilizzando un servizio. Il telefono diventa super lento e si blocca dopo un po 'di tempo. Devo ricreare anche la notifica per questo problema? – berserk

2

Ho avuto lo stesso problema. La mia soluzione è vicina a quella che ha detto @haimg, ma memorizzo la notifica in cache (viene ricreato solo RemoteView). In questo modo, la notifica non lampeggerà di nuovo se la stai guardando.

Esempio:

public void createNotification(Context context){ 
    Notification.Builder builder = new Notification.Builder(context); 

    // Set notification stuff... 

    // Build the notification 
    notification = builder.build(); 
} 

public void updateNotification(){ 
    notification.bigContentView = getBigContentView(); 
    notification.contentView = getCompactContentView(); 

    mNM.notify(NOTIFICATION_ID, notification); 
} 

E nei metodi getBigContentView e getCompactContentView ho restituire una nuova RemoteViews con il layout aggiornato.