2010-07-19 3 views
0

Я пишу игру для Android, и я, наконец, все сделал, и на эмуляторе и на моем телефоне, который является корневым дроидом, он отлично справился, но когда я запустил на рынок, я начал получая сообщения об этом, закрытие силы, мои родители положили его на свой телефон, и он закрыл его, когда они попытались щелкнуть кнопку «Пуск» в экранном меню, но мои друзья умерли, когда он попытался снова открыть его после игры. У меня есть его ловушка, но я еще не уверен в моих родителях. ЗдесьoutOfMemoryException в игре Android

07-18 23:58:32.457: ERROR/AndroidRuntime(25513): FATAL EXCEPTION: main 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.graphics.Bitmap.nativeCreate(Native Method) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.graphics.Bitmap.createBitmap(Bitmap.java:468) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.graphics.Bitmap.createBitmap(Bitmap.java:435) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:346) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:372) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at com.Waldev.cannontrial.CannonBlast$panel.<init>(CannonBlast.java:136) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at com.Waldev.cannontrial.CannonBlast.onCreate(CannonBlast.java:41) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.os.Looper.loop(Looper.java:123) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at java.lang.reflect.Method.invoke(Method.java:521) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
07-18 23:58:32.457: ERROR/AndroidRuntime(25513):  at dalvik.system.NativeStart.main(Native Method) 
07-18 23:58:32.487: WARN/ActivityManager(85): Force finishing activity com.Waldev.cannontrial/.CannonBlast 

Я не знаю, почему он сделал бы это, я думал, что я закрыл игру чисто, но тот даже не вопрос, потому что мои родители не могут даже получить игру, чтобы открыть. Есть ли что-то, что могло бы привести к тому, что это произошло? Я добавил несколько вещей в манифест, например, finishOnTaskLaunch и тому подобное, но ничто, кажется, не исправляет ситуацию. Есть идеи? И вам нужно что-нибудь еще, чтобы посмотреть, что может произойти, я буду пытаться исправить это, пока это не закончится, поэтому я буду комментировать довольно быстро. Заранее спасибо

+0

возможным дубликат [java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет VM - андроид] (http://stackoverflow.com/questions/1949066/java-lang-outofmemoryerror-bitmap-size-exceeds-vm-budget-android) –

ответ

0

Попробуйте этот StackOverflow вопрос:

java.lang.OutOfMemoryError: bitmap size exceeds VM budget - Android

Ваш вопрос, скорее всего, будет закрыто, кстати, потому что это дубликат. Но вопрос и решение, с которыми я связан, должны помочь вам.

+0

Это ссылка не объясняет, почему она остановится во время игры, как это происходит с дроидами, она ничего не сделает, кроме отображения нескольких растровых изображений, а затем она умрет:/ – William

0

Это зависит от того, как вы загружаете и управляете своими растровыми изображениями. (Например, вы можете быть уверены, что вы не перезаряжать растровых изображений во время каждого вызова onDraw()?)

Вы также можете уменьшить объем памяти ваши растровые изображения взяться за счет увеличения размера выборки во время загрузки:

Context c = myActivity; // Some activity 
BitmapFactory.Options options = new BitmapFactory.Options(); 

// 4 here means your resulting bitmap will be 1/4 width and height => 1/16 size 
options.inSampleSize = 4; // Powers of 2 are better 

BitmapFactory.decodeResource(c.getResources(), R.drawable.sample_bitmap, options); 
+0

Я использую scaledBitmap на большинстве своих растровых изображений, это не то же самое вещь? – William

+0

Хмм .. Я собираюсь предположить, что inSampleSize буквально читает меньше данных, а scaledBitmap только масштабирует его во время рендеринга, сохраняя 100% данных. Я мог ошибаться. Другое примечание после некоторого тестирования: увеличение inSampleSize физически уменьшает размеры полученных растровых изображений, поэтому вам придется масштабировать его до целевого размера. –

+0

ладно, спасибо, я попробую это, но есть ли какая-то причина, по которой вы можете думать, что она просто умрет при повторном входе на некоторые телефоны и умереть, когда просто пытается начать игру в других? Я бы не подумал, что существует большая разница в памяти между дроидом и nexus. – William

Смежные вопросы