Моя проблема в том, что я не уверен, как обрабатывать растровые изображения в Android (Java). Итак, прежде всего, давайте посмотрим на сам код. У меня есть класс, который обрабатывает растровые изображения.
public class GlowImageFactory {
private Bitmap[] images;
public GlowImageFactory(Context context) {
this.images = new Bitmap[9];
initializeImages(context);
}
public void initializeImages(Context context) {
images[0] = BitmapFactory.decodeResource(context.getResources(), R.drawable.glow1);
images[1] = BitmapFactory.decodeResource(context.getResources(), R.drawable.glow2);
images[2] = BitmapFactory.decodeResource(context.getResources(), R.drawable.glow3);
images[3] = BitmapFactory.decodeResource(context.getResources(), R.drawable.glow4);
images[4] = BitmapFactory.decodeResource(context.getResources(), R.drawable.glow5);
images[5] = BitmapFactory.decodeResource(context.getResources(), R.drawable.glow4);
images[6] = BitmapFactory.decodeResource(context.getResources(), R.drawable.glow3);
images[7] = BitmapFactory.decodeResource(context.getResources(), R.drawable.glow2);
images[8] = BitmapFactory.decodeResource(context.getResources(), R.drawable.glow1);
}
public Bitmap getImage(int index) {
return this.images[index];
}
}
Так вот как я создаю растровые изображения по одному. Мой первый вопрос: нужно ли каким-то образом уничтожать эти растровые изображения в конце? Или уведомить G C, что эти изображения больше не нужны? Например, когда действие уничтожается или что-то в этом роде.
В другом файле я использую этот класс для обработки изображений. Давайте посмотрим код этого второго класса:
public class LaserLineIcon extends Sprite {
private GlowImageFactory glowImageFactory;
private float speed = 3200;
private int frameCounter = 0;
private int counter = 0;
public LaserLineIcon(Context context) {
this.x = x;
this.y = y;
initialize(context);
}
private void initialize(Context context) {
glowImageFactory = new GlowImageFactory(context);
setImage(ImageFactory.createImage(context, ImageType.LASER_LINE_ICON));
setX(RandomGenerator.randomX());
setY(-getImage().getHeight());
}
@Override
public void move(int x, int y) {
//laser star coming from the top toward the bottom of the canvas
this.y += this.speed* Constants.GAME_SPEED;
if(this.y>= ScreenHelper.getScreenHeight()) {
this.die();
}
}
@Override
public void draw(Canvas canvas) {
counter++;
canvas.drawBitmap(glowImageFactory.getImage(frameCounter),getX(),getY(),null);
if(counter%6==0) frameCounter++;
if(frameCounter>=9) {
frameCounter = 0;
counter=0;
}
canvas.drawBitmap(getImage(), getX(), getY(), null);
}
}
Так вот, как я рисую растровые изображения (изображения) на холсте с помощью метода draw ().
Каким-то образом память приложения продолжает увеличиваться. Нужно ли вручную освобождать память для растровых изображений? Или какие-то другие операции, которые мне нужно сделать?
(я знаю о проблемах с памятью, потому что я использовал Profiler в Android Studio)
Большое спасибо за все комментарии!