Ну, как я понимаю, если все форматы изображений сразу же декодируются в массив ARGB при создании изображений, единственное, что вы действительно можете сделать, это создать верхнюю границу объема памяти, который вы будете использовать для отображения вещи на экране.
Вы можете создать кэш изображений, который будет знать, сколько кучи памяти использует каждое изображение для этого конкретного устройства, загружая и выгружая изображения, если они необходимы. Конечно, это означает, что полагаться на Grabage Collector может быть слишком много, чтобы поддерживать отзывчивость вашего приложения.
Управление кэшем, вероятно, должно происходить в выделенном потоке.
Сохранение только одного изображения, загруженного в каждый момент времени, может работать, если экраны вашего приложения достаточно статичны и не требуют слишком много анимации.
Также помните, что MIDP Canvas обычно не перезагружается. Если вы используете 2 разных вызова Canvas.paint () для рисования 2 разных изображений в 2 разных областях экрана, вы должны иметь возможность отображать оба изображения в течение долгого времени после того, как фактические объекты изображений были собраны так же долго, как и вы. нарисуйте что-нибудь на них.
С чисто коммерческой точки зрения вам нужно уметь говорить своим клиентам, что некоторые телефоны имеют настолько плохую реализацию Java, что вы не собираетесь их поддерживать.