Раньше работало так: грузим все картинки - запускаем игру. Работало корректно. Но загрузка была около секунды. Пытаемся улучшить, добавляем загрузку картинок в другой поток, а до того времени пишем на экране «Load...». Чаще чем 50% случаев работает все как надо. Но иногда падает с разными ошибками Например
E/SurfaceHolder﹕ Exception locking surface
java.lang.IllegalArgumentException.
public Bitmap scaleToWidth(Bitmap b , int width){
return Bitmap.createScaledBitmap(b , width, width*b.getHeight()/b.getWidth() , true);
}
public Bitmap bitmapLoadRaw(int raw){
return BitmapFactory.decodeStream(getResources().openRawResource(raw)); // ЭТО ТА САМАЯ 81 СТРОЧКА ИЗ СООБЩЕНИЯ ОБ ОШИБКЕ НИЖЕ
}
// много другого кода....
class WorkingClass implements Runnable{
@Override
public void run() {
fingerImg = scaleToWidth(bitmapLoadRaw(R.raw.finger),WHmin/5);
//много похожих запросов на загрузку других картинок, но падает именно на первой строчке
}
}
WorkingClass workingClass = new WorkingClass();
Thread thread = new Thread(workingClass);
thread.start();
08-16 14:17:39.469 14270-14681/com.bacteria.app E/dalvikvm-heap﹕ Out of memory on a 2155624-byte allocation.
08-16 14:17:39.503 14270-14681/com.bacteria.app E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-1405
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:568)
at com.bacteria.app.FullscreenActivity.bitmapLoadRaw(FullscreenActivity.java:81)
at com.bacteria.app.FullscreenActivity$DrawView$1WorkingClass.run(FullscreenActivity.java:1257)
at java.lang.Thread.run(Thread.java:856)
П.С. сам размер этой картинки весьма мал - 160 Кбайт. 700*800 пикс примерно.