title: Better frame rate drawing bitmaps in a Canvas?
body: <p>I'm shooting for an animation in a live wallpaper. Here's the code. It pretty much follows the CubeWallpaper demo: </p>
  
  <pre><code>    void drawFrame() {
          final SurfaceHolder holder = getSurfaceHolder();
      final BufferedInputStream buf;
      final Bitmap bitmap, rbitmap;
  
          Canvas c = null;
          try {
              c = holder.lockCanvas();
              if (c != null) {
          try {
          buf = new 
              BufferedInputStream(assets.
                      open(folder+"/"
                           +imageList[ilen++])
                      );
          bitmap = BitmapFactory.
              decodeStream(buf);
          rbitmap = Bitmap.createBitmap
              (bitmap,
               0,0,imageWidth,imageHeight,
               transMatrix,false);
          c.drawBitmap(rbitmap,
                   paddingX,
                   paddingY,
                   null);
          if ( ilen &gt;= imageCount ) ilen=0;
          }
          catch (Exception e) { e.printStackTrace(); }
              }
          } finally {
              if (c != null) holder.unlockCanvasAndPost(c);
          }
  
          // Reschedule the next redraw
          mHandler.removeCallbacks(mDrawCube);
          if (mVisible) {
              mHandler.postDelayed(mDrawCube, fps);
          }
      }
  </code></pre>
  
  <p>where "transMatrix" is a scaling and rotation matrix predefined before.</p>
  
  <p>It's supposed to render at 30fps but of course it doesn't do that. My initial guess is that the BufferedInputStream is one factor. I should probably cache a few of these as I go along along with the Bitmaps. But any other ideas? Will I have to use the OpenGL hack for live wallpapers?</p>