Мне нужна ваша помощь. Я пробовал много разных вещей, чтобы выяснить проблему, но у меня все еще проблема с памятью. мой код Здесь `s:Android: растровое изображение в ImageSwitcher вызывает ошибку OutOfMemory
public class AboutActivity extends Activity implements ViewSwitcher.ViewFactory {
//private WebView webview;
static final String BRANDING_PREFS_NAME = "BrandingInfo";
int[] imageIds = {0,1,2,3,4,5 };
int currentImageIndex = 0;
//Runnables
private final Handler handler = new Handler();
private ShowNextImageRunnable showNextImage;
/** Called when the activity is first created. */
/**@Override */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
ImageSwitcher imageSwitcher = (ImageSwitcher)findViewById(R.id.imageSwitcher);
imageSwitcher.setFactory(this);
imageSwitcher.setImageResource(R.drawable.about);
if(brandingInfo.getString("aboutImage0", "").length() > 0 ||
brandingInfo.getString("aboutImage1", "").length() > 0 ||
brandingInfo.getString("aboutImage2", "").length() > 0 ||
brandingInfo.getString("aboutImage3", "").length() > 0 ||
brandingInfo.getString("aboutImage4", "").length() > 0 ||
brandingInfo.getString("aboutImage5", "").length() > 0) {
handler.postDelayed(showNextImage, 0);
}
}
@Override
public void onPause() {
super.onPause();
}
@Override
public void onResume() {
super.onResume();
}
public View makeView() {
ImageView i = new ImageView(this);
i.setBackgroundColor(0xFF000000);
i.setScaleType(ImageView.ScaleType.FIT_START);
i.setLayoutParams(new ImageSwitcher.LayoutParams(ImageSwitcher.LayoutParams.MATCH_PARENT,
ImageSwitcher.LayoutParams.MATCH_PARENT));
i.setAdjustViewBounds(true);
return i;
}
private boolean showNextImage(int index){
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPurgeable = true;
options.inInputShareable = true;
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(openFileInput("about"+index+".png"), null, options);
} catch (FileNotFoundException e) {
return false;
}
ImageSwitcher imageSwitcher = (ImageSwitcher)findViewById(R.id.imageSwitcher);
final ImageView g = (ImageView) imageSwitcher.getCurrentView();
final Bitmap b = bitmap;
runOnUiThread(new Runnable() {
@Override
public void run() {
if (b != null) {
g.setImageBitmap(b);
}
}
});
bitmap = null;
return true;
}
class ShowNextImageRunnable implements Runnable {
public void run() {
++currentImageIndex;
if(currentImageIndex >= imageIds.length)
currentImageIndex = 0;
if(!showNextImage(currentImageIndex))
handler.postDelayed(showNextImage, 0);
else
handler.postDelayed(showNextImage, 3000);
}
}
}
Анализатор памяти Eclipse, показывает мне, что память накапливается в байт [] с 1,3 МБ. Является ли размер растрового изображения проблемой? Я не знаю, почему память растет.
Ошибка возникает в функции «decodeStream()» класса BitmapFactory.
Надеюсь, вы можете мне помочь.
Редактировать: Размер каждого растрового изображения ~ 1,3 МБ, возможно, он большой. Как я мог реализовать кэширование растровых изображений для моего образа. У меня 6 изображений, и я загружаю изображение каждые 3 секунды. Я думал о «публичном статическом LRU-CACHE»?
Его общее приложение, использующее слишком много памяти. Возможно, из загрузки слишком много растровых изображений слишком большого размера. Насколько велики растровые изображения? И вы можете реализовать кэширование, чтобы не сохранять старые растровые изображения и/или явно перерабатывать старые. –
Привет, размер изображений ~ 1,3 МБ. Это большой? Не могли бы вы рассказать мне, как реализовать кеширование? Thx –
1 из них нет, многие из них могут быть. Для кэширования посмотрите на LRUCache, его в библиотеке поддержки. –