1

有时在卡被捕获后,应用程序会崩溃。

java.lang.OutOfMemoryError
       at android.graphics.Bitmap.nativeCreate(Bitmap.java)
       at android.graphics.Bitmap.createBitmap(Bitmap.java:924)
       at android.graphics.Bitmap.createBitmap(Bitmap.java:901)
       at android.graphics.Bitmap.createBitmap(Bitmap.java:868)
       at io.card.payment.ah.a()
       at io.card.payment.CardIOActivity.a()
       at io.card.payment.CardScanner.onPreviewFrame()
       at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1016)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:136)
       at android.app.ActivityThread.main(ActivityThread.java:5579)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
       at dalvik.system.NativeStart.main(NativeStart.java)

每次我在 Galaxy S5 上拍摄时都会发生这种情况。以下是我用来启动扫描意图的参数:

Intent scanIntent = new Intent(CardInfoActivity.this, CardIOActivity.class);
scanIntent.putExtra(CardIOActivity.EXTRA_APP_TOKEN, Constants.CARD_IO_TOKEN);
scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, true);
scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, true);
scanIntent.putExtra(CardIOActivity.EXTRA_SUPPRESS_CONFIRMATION, true);
scanIntent.putExtra(CardIOActivity.EXTRA_SUPPRESS_MANUAL_ENTRY, true);
startActivityForResult(scanIntent, MY_SCAN_REQUEST_CODE);

也许有人知道如何解决这个问题?

4

1 回答 1

0

Android 位图将图像保存在本机内存中,而不是 Java 堆中。如果您快速分配一堆图像,这可能会发生,因为清理仅在 Java GC 运行时发生,这与 Java 堆相关联。确保您bitmap.recycle()在处理完您一直在处理的图像后打电话会有所帮助。

于 2014-09-03T15:46:39.797 回答