我的应用程序中存在严重的性能问题,当加载位图时,它似乎占用了很多内存。
我有一个drawable文件夹,其中包含所有Android设备的位图大小,这些位图具有高质量。基本上它通过每个位图并根据大小为设备创建一个新位图。 (决定这样做是因为它支持正确的方向和任何设备)。它可以工作,但它占用了很多内存并且需要时间来加载。任何人都可以对以下代码提出任何建议。
public Bitmap getBitmapSized(String name, int percentage, int screen_dimention, int frames, int rows, Object params)
{
if(name != "null")
{
_tempInt = _context.getResources().getIdentifier(name, "drawable", _context.getPackageName());
_tempBitmap = (BitmapFactory.decodeResource(_context.getResources(), _tempInt, _BM_options_temp));
}
else
{
_tempBitmap = (Bitmap) params;
}
_bmWidth = _tempBitmap.getWidth() / frames;
_bmHeight = _tempBitmap.getHeight() / rows;
_newWidth = (screen_dimention / 100.0f) * percentage;
_newHeight = (_newWidth / _bmWidth) * _bmHeight;
//Round up to closet factor of total frames (Stops juddering within animation)
_newWidth = _newWidth * frames;
//Output the created item
/*
Log.w(name, "Item");
Log.w(Integer.toString((int)_newWidth), "new width");
Log.w(Integer.toString((int)_newHeight), "new height");
*/
//Create new item and recycle bitmap
Bitmap newBitmap = Bitmap.createScaledBitmap(_tempBitmap, (int)_newWidth, (int)_newHeight, false);
_tempBitmap.recycle();
return newBitmap;
}
答案 0 :(得分:1)
在Android培训网站上有一个很好的指南:
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
关于有效加载位图图像 - 强烈推荐!
答案 1 :(得分:0)
这样可以节省空间。如果不使用Alpha颜色,最好不要使用A通道。
Options options = new BitmapFactory.Options();
options.inScaled = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
// or Bitmap.Config.RGB_565 ;
// or Bitmap.Config.ARGB_4444 ;
Bitmap newBitmap = Bitmap.createScaledBitmap(_tempBitmap, (int)_newWidth, (int)_newHeight, options);