Я столкнулся с очень интересной ситуацией. У меня есть доступ к двум устройствам, и одно из них является одним из самых высококлассных андроидов (Galaxy Note), а другое - приличным HTC Inspire. Теперь, благодаря разнице в этих двух устройствах, я смог заметить, что Galaxy Note прекрасно загружает мое приложение, но Inspire возвращает исключение из памяти. А трассировка стека говорит о том, что это битмапы в моем коде. У меня есть 5 растровых изображений с очень высоким разрешением (например, 1280 x 800). И я инициализирую каждый из них в конструкторе SurfaceView. Я знаю, что это глупая идея, но моя записка способна справиться с нагрузкой. Однако более хрупкие устройства не могут обрабатывать все эти растровые данные. Как мне решить мою проблему? Я могу снизить разрешение, но это последнее средство. Вот код, похожий на мой:
static public class GraphicsView extends SurfaceView implements Runnable {
Thread t;
SurfaceHolder holder;
boolean sentinel = false;
Bitmap b1, b2, b3, b4, b5;
public GraphicsView(Context context) {
super(context);
holder = getHolder();
b1 = BitmapFactory.decodeResource(getResources(), R.drawable.i);
b2 = BitmapFactory.decodeResource(getResources(), R.drawable.like);
b3 = BitmapFactory.decodeResource(getResources(), R.drawable.csharp);
b4 = BitmapFactory.decodeResource(getResources(), R.drawable.python_and);
b5 = BitmapFactory.decodeResource(getResources(), R.drawable.java);
/**
*
* This is where the exceptions come!
*
**/
}
public void run() {
while (sentinel) {
if(!holder.getSurface().isValid()) {
continue;
}
try {
Canvas canvas = holder.lockCanvas();
//Drawing commands go here...ommited. These commands may use any of the 5 bitmaps
holder.unlockCanvasAndPost(canvas);
}catch(Exception e) {
//Excpetion handling...its not getting here anyways
}
}
}
//More code below...Ommited...
}