У меня есть задача загрузки, которая периодически сообщает о прогрессе уведомлению.Некоторое время я использовал один закрытый член RemoveView для обновления каждый раз.
Например:
private RemoteViews mRemoteView;
protected void onCreate(){
mRemoteView = new RemoteViews( getPackageName(), R.layout.custom_layout )
contentView.setImageViewResource(R.id.notification_icon, R.drawable.downloads);
contentView.setTextViewText(R.id.notification_text, "Downloading A File " + (int)( (double)progress/(double)max * 100 ) + "%");
contentView.setProgressBar(R.id.mProgress, max, progress, false);
notification.contentView = contentView;
mNotificationManager.notify(HELLO_ID, notification);
}
protected void onProgressUpdate(Integer... prog) {
contentView.setProgressBar(R.id.mProgress, max, progress, false);
mNotificationManager.notify(HELLO_ID, notification);
}
Однако я обнаружил, что сборщик мусора постоянно очищает пространство и замедляет это приложение доползти долго.Затем я попытался создать новый RemoteViews каждый раз, когда я обновлялся, и это работает.Мне интересно, почему это так.Я нашел ссылку здесь , которая была довольно полезной, но я ищу дополнительную информацию.
Вот код, который работает:
protected void onProgressUpdate(Integer... prog) {
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification_layout);
contentView.setImageViewResource(R.id.notification_icon, R.drawable.downloads);
contentView.setTextViewText(R.id.notification_text, "Downloading A File " + (int)( (double)progress/(double)max * 100 ) + "%");
contentView.setProgressBar(R.id.mProgress, max, progress, false);
notification.contentView = contentView;
mNotificationManager.notify(HELLO_ID, notification);
}