Google TV devices have higher display resolution. If you provide low resolution or small p_w_picpaths in your layouts, they will appear pixelated, fuzzy, or grainy. This is not a good experience for the user. Instead, use high resolution p_w_picpaths. Remember, though, that downloading and storing high-resolution p_w_picpaths may cause "out of memory" errors. To avoid these errors, follow these tips: 

  •    Load p_w_picpaths only when they're displayed on the screen. For example, are displaying multiple p_w_picpaths in a GridView, ListView or    Gallery,  only load an p_w_picpath when its getView() is called. 
  • Call recycle() on Bitmaps that are no longer needed.
  • Use WeakReferences for    storing references to Bitmap objects in a in memory collection.
  • If you fetch the p_w_picpaths from the network, use     AsyncTask to fetch them all at once or as needed.  Never do network transactions on the main ("UI") thread. Instead, if possible, fetch all the p_w_picpaths at once on a background thread, and store them on the sdcard.
  • Scale down very large p_w_picpaths to a more appropriate size as you download them; otherwise, downloading the p_w_picpath may cause an "out of memory" error.   Here is sample code that does this scaling while downloading:  

   
   
   
   
  1. // Get the source p_w_picpath's dimensions  
  2.    BitmapFactory.Options options = new BitmapFactory.Options();  
  3.    options.inJustDecodeBounds = true// this does not download the actual p_w_picpath, just downloads headers.  
  4.    BitmapFactory.decodeFile(IMAGE_FILE_URL, options);  
  5.  
  6.    int srcWidth = options.outWidth;  // actual width of the p_w_picpath.  
  7.    int srcHeight = options.outHeight;  // actual height of the p_w_picpath.  
  8.  
  9.    // Only scale if the source is big enough. This code is just trying to fit a p_w_picpath into a certain width.  
  10.    if(desiredWidth > srcWidth)  
  11.      desiredWidth = srcWidth;  
  12.  
  13.    // Calculate the correct inSampleSize/scale value. This helps reduce memory use. It should be a power of 2.  
  14.    int inSampleSize = 1;  
  15.    while(srcWidth / 2 > desiredWidth){  
  16.      srcWidth /= 2;  
  17.      srcHeight /= 2;  
  18.      inSampleSize *= 2;  
  19.    }  
  20.  
  21.    float desiredScale = (float) desiredWidth / srcWidth;  
  22.  
  23.    // Decode with inSampleSize  
  24.    options.inJustDecodeBounds = false;  // now download the actual p_w_picpath.  
  25.    options.inDither = false;  
  26.    options.inSampleSize = inSampleSize;  
  27.    options.inScaled = false;  
  28.    options.inPreferredConfig = Bitmap.Config.ARGB_8888;  // ensures the p_w_picpath stays as a 32-bit ARGB_8888 p_w_picpath.   
  29.                                                          // This preserves p_w_picpath quality.  
  30.    Bitmap sampledSrcBitmap = BitmapFactory.decodeFile(IMAGE_FILE_URL, options);  
  31.  
  32.    // Resize  
  33.    Matrix matrix = new Matrix();  
  34.    matrix.postScale(desiredScale, desiredScale);  
  35.    Bitmap scaledBitmap = Bitmap.createBitmap(sampledSrcBitmap, 00,  
  36.        sampledSrcBitmap.getWidth(), sampledSrcBitmap.getHeight(), matrix, true);  
  37.    sampledSrcBitmap = null;  
  38.  
  39.    // Save  
  40.    FileOutputStream out = new FileOutputStream(LOCAL_PATH_TO_STORE_IMAGE);  
  41.    scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);  
  42.    scaledBitmap = null;