我在Android 2.3.6 Nexus One智能手机上运行 Phonegap(Cordova 3.0)应用。我的问题是,当我启动相机并捕获图像时,捕获后应用程序崩溃并被迫关闭。
我使用logcat app来查看日志,这就是我所拥有的:
02-15 13:07:04.515 E/dalvikvm-heap( 5678): 3840000-byte external allocation too large for this process.
02-15 13:07:04.555 E/GraphicsJNI( 5678): VM won't let us allocate 3840000 bytes
02-15 13:07:04.555 D/dalvikvm( 5678): GC_FOR_MALLOC freed 0K, 56% free 3528K/8007K, external 21308K/23356K, paused 29ms
02-15 13:07:04.555 D/AndroidRuntime( 5678): Shutting down VM
02-15 13:07:04.555 W/dalvikvm( 5678): threadid=1: thread exiting with uncaught exception (group=0x40015560)
02-15 13:07:04.555 E/AndroidRuntime( 5678): FATAL EXCEPTION: main
02-15 13:07:04.555 E/AndroidRuntime( 5678): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
02-15 13:07:04.555 E/AndroidRuntime( 5678): at android.graphics.Bitmap.nativeCreate(Native Method)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at android.graphics.Bitmap.createBitmap(Bitmap.java:477)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at android.graphics.Bitmap.createBitmap(Bitmap.java:444)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:349)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at org.apache.cordova.camera.CameraLauncher.getScaledBitmap(CameraLauncher.java:618)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at org.apache.cordova.camera.CameraLauncher.onActivityResult(CameraLauncher.java:346)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at org.apache.cordova.CordovaActivity.onActivityResult(CordovaActivity.java:915)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at android.app.Activity.dispatchActivityResult(Activity.java:3908)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at android.app.ActivityThread.deliverResults(ActivityThread.java:2528)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at android.app.ActivityThread.access$2000(ActivityThread.java:117)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at android.os.Handler.dispatchMessage(Handler.java:99)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at android.os.Looper.loop(Looper.java:130)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at android.app.ActivityThread.main(ActivityThread.java:3683)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at java.lang.reflect.Method.invokeNative(Native Method)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at java.lang.reflect.Method.invoke(Method.java:507)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-15 13:07:04.555 E/AndroidRuntime( 5678): at dalvik.system.NativeStart.main(Native Method)
02-15 13:07:04.565 W/ActivityManager( 118): Force finishing activity com.test.app/.TelerikCallbackActivity
从日志文件中我可以理解的是,没有足够的内存来表示捕获图像。
我正在使用navigator.camera.getPicture
和Camera.DestinationType.FILE_URI
来捕获照片并对其进行处理。我尝试将图像质量从50降低到20,并没有解决问题。
从日志中我可以理解,我的Nexus One拍摄的图像大约是3.7MB,尽管JPEG拍摄的图像要小得多。
该应用程序没有在我尝试过的其他设备上崩溃,仅在我的Nexus One上,但我的Nexus产品的规格与其他手机相比最低。
我不知道如何解决这个问题,需要你的帮助。感谢。
更新:我将分辨率从1600像素降低到600像素(宽度或高度的最大值),相机成功拍摄了图像。但是,我希望能够在我的Nexus One手机上获得更高的分辨率,如果可能的话,至少可以达到1600像素。