2012-05-10 6 views
0

Я использую следующий учебник, в developer.android.com: http://developer.android.com/training/camera/photobasics.html с API 2,1App камеры аварии

  • Когда я нажимаю взять небольшую картину, не проблема
  • Когда я нажимаю в дубля маленькая картинка и после того, как я нажимаю в взять общую картину, не проблема
  • Но, когда я нажимаю непосредственно в большой картине, я беру картину и мой крах приложения ...

In LogCat:

05-10 09:26:30.773: D/CameraSample(3407): failed to create directory 
05-10 09:26:33.713: W/IInputConnectionWrapper(3407): showStatusIcon on inactive InputConnection 
05-10 09:26:45.883: I/Parcours(3407): handleBigCameraPhoto 
05-10 09:26:46.133: D/dalvikvm(3407): GC_EXTERNAL_ALLOC freed 124K, 52% free 2628K/5379K, external 1685K/2133K, paused 207ms 
05-10 09:26:46.143: E/dalvikvm-heap(3407): 31961088-byte external allocation too large for this process. 
05-10 09:26:46.163: E/GraphicsJNI(3407): VM won't let us allocate 31961088 bytes 
05-10 09:26:46.213: D/dalvikvm(3407): GC_FOR_MALLOC freed 2K, 52% free 2625K/5379K, external 1685K/2133K, paused 55ms 
05-10 09:26:46.213: D/skia(3407): --- decoder->decode returned false 
05-10 09:26:46.213: D/AndroidRuntime(3407): Shutting down VM 
05-10 09:26:46.223: W/dalvikvm(3407): threadid=1: thread exiting with uncaught exception (group=0x4001d560) 
05-10 09:26:46.223: E/AndroidRuntime(3407): FATAL EXCEPTION: main 
05-10 09:26:46.223: E/AndroidRuntime(3407): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:470) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:284) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at rdaquin.apps.takephoto.TakePhotoActivity.setPic(TakePhotoActivity.java:124) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at rdaquin.apps.takephoto.TakePhotoActivity.handleBigCameraPhoto(TakePhotoActivity.java:195) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at rdaquin.apps.takephoto.TakePhotoActivity.onActivityResult(TakePhotoActivity.java:281) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at android.app.Activity.dispatchActivityResult(Activity.java:3908) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2549) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:2595) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at android.app.ActivityThread.access$2000(ActivityThread.java:121) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at android.os.Looper.loop(Looper.java:123) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at android.app.ActivityThread.main(ActivityThread.java:3701) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at java.lang.reflect.Method.invoke(Method.java:507) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
05-10 09:26:46.223: E/AndroidRuntime(3407):  at dalvik.system.NativeStart.main(Native Method) 

Если у вас есть код, спросите меня.

Я не понимаю, почему мое приложение падает, я чувствую, что это проблема памяти, но я не знаю, что делать. Так что, когда я делаю «сделать небольшое изображение» и «сделаю большую картинку», это сработает. Но если я перезагружу приложение и что «сделаю большую картинку» не работает

ответ

2

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

+0

OK, но вопрос. Почему я делаю маленькую картинку, и после того, как я сделаю большую картину, у меня нет проблем. Но когда я перезапускаю приложение, и я беру одну большую картинку, у меня проблема с памятью? –

+0

Я нашел решение для своей проблемы, мне нужно изменить bmOptions.inSampleSize в моем примере, я положил 5, и все в порядке. У вас есть идея рассчитать scaleFactor? –

+0

Это просит раму масштабировать изображение вниз. Почему бы просто не начать с меньшего изображения? Легче, быстрее. –

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