title: Huge memory usage in notifications
body: <p>I am developing an application with a service which show the progress of a timer in the notification area (with a progress bar and a text). I have extracted below a simpler example with the same problem. </p>
  
  <p>The code of the Service:</p>
  
  <pre><code>public class TNService extends Service {
      private NotificationManager nm;
      private Notification notification;
      private RemoteViews remoteView;
  
      @Override
      public void onCreate () {
          nm = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
          notification = new Notification(android.R.drawable.stat_sys_download, 
                  "My notification", 
                  System.currentTimeMillis());
          remoteView = new RemoteViews(this.getPackageName(),
                  R.layout.notification);
          remoteView.setImageViewResource(R.id.icon, android.R.drawable.stat_sys_download);
          remoteView.setTextViewText(R.id.text, "");
          remoteView.setProgressBar(R.id.progress, 100, 0, false);
          notification.flags = Notification.FLAG_NO_CLEAR;
          notification.contentView = remoteView;
          notification.contentIntent = PendingIntent.getActivity(this, 0, new Intent(this,
                  TNActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
  
          Timer timer = new Timer ();
          timer.schedule(new TNTask(this), 0, 200);
      }
  
      @Override
      public IBinder onBind(Intent arg0) {
          return null;
      }
  
      public void updateNotification(int progress) {
          remoteView.setProgressBar(R.id.progress, 1000, progress, false);
          remoteView.setTextViewText(R.id.text, "Progress: " + progress);
          nm.notify(0, notification);
      }
  }
  </code></pre>
  
  <p>The code of the TimerTask:</p>
  
  <pre><code>public class TNTask extends TimerTask {
      private TNService service;
      private int progress;
  
      public TNTask(TNService s) {
          this.service = s;
          this.progress = 0;
      }
  
      @Override
      public void run() {
              progress = (progress + 1) % 1000;
          this.service.updateNotification (progress);
      }
  }
  </code></pre>
  
  <p>The problem is the huge memory usage. Here is the logcat output:</p>
  
  <pre><code>D/dalvikvm(11985): GC_EXPLICIT freed 1258 objects / 84016 bytes in 1157ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 52216 objects / 1900968 bytes in 130ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 49465 objects / 1805248 bytes in 125ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 53106 objects / 1909992 bytes in 134ms
  D/dalvikvm(12008): GC_EXPLICIT freed 1604 objects / 100944 bytes in 90ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 53011 objects / 1937160 bytes in 135ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 49806 objects / 1817992 bytes in 143ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 49016 objects / 1769536 bytes in 135ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 53509 objects / 1941064 bytes in 145ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 49895 objects / 1842312 bytes in 146ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 48728 objects / 1774496 bytes in 150ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 47557 objects / 1701976 bytes in 146ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 53540 objects / 1903808 bytes in 156ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 48997 objects / 1784048 bytes in 158ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 48326 objects / 1776864 bytes in 158ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 47566 objects / 1742488 bytes in 169ms
  D/dalvikvm(   85): GC_FOR_MALLOC freed 47606 objects / 1703416 bytes in 170ms
  D/dalvikvm(  162): GC_EXPLICIT freed 11238 objects / 641368 bytes in 1064ms
  </code></pre>
  
  <p>I think it is too much memory and after a while the phone hangs with this output:</p>
  
  <pre><code>D/dalvikvm(   85): GC_FOR_MALLOC freed 0 objects / 0 bytes in 241ms
  I/dalvikvm-heap(   85): Clamp target GC heap from 24.008MB to 24.000MB
  I/dalvikvm-heap(   85): Grow heap (frag case) to 24.000MB for 52-byte allocation
  I/dalvikvm-heap(   85): Clamp target GC heap from 26.008MB to 24.000MB
  D/dalvikvm(   85): GC_FOR_MALLOC freed 0 objects / 0 bytes in 241ms
  I/dalvikvm-heap(   85): Clamp target GC heap from 24.008MB to 24.000MB
  I/dalvikvm-heap(   85): Grow heap (frag case) to 24.000MB for 24-byte allocation
  I/dalvikvm-heap(   85): Clamp target GC heap from 26.008MB to 24.000MB
  D/dalvikvm(   85): GC_FOR_MALLOC freed 0 objects / 0 bytes in 247ms
  I/dalvikvm-heap(   85): Clamp target GC heap from 24.009MB to 24.000MB
  I/dalvikvm-heap(   85): Grow heap (frag case) to 24.000MB for 28-byte allocation
  I/dalvikvm-heap(   85): Clamp target GC heap from 26.009MB to 24.000MB
  D/dalvikvm(   85): GC_FOR_MALLOC freed 0 objects / 0 bytes in 247ms
  I/dalvikvm-heap(   85): Clamp target GC heap from 24.009MB to 24.000MB
  </code></pre>
  
  <p>Anyone knows how can I do it without using so many memory?</p>
  
  <p>Thanks!</p>