Android CWAC相机库内存不足

Android CWAC相机库内存不足,android,commonsware-cwac,Android,Commonsware Cwac,我试图用安卓系统中的CWAC库拍照,结果记忆犹新。我只是在主活动中使用一个按钮,并动态创建片段 预演会很顺利的。但是当我点击拍照时,它会崩溃,内存不足。有人能建议如何解决这个问题吗 CameraFragment cameraFragment = new CameraFragment(); setContentView(R.layout.activity_shopping); //Create the CameraFragment and add it to th

我试图用安卓系统中的CWAC库拍照,结果记忆犹新。我只是在主活动中使用一个按钮,并动态创建片段

预演会很顺利的。但是当我点击拍照时,它会崩溃,内存不足。有人能建议如何解决这个问题吗

CameraFragment cameraFragment = new CameraFragment();

        setContentView(R.layout.activity_shopping);
        //Create the CameraFragment and add it to the layout
        //CameraFragment f = new CameraFragment();
        getFragmentManager().beginTransaction()
                .add(R.id.container, cameraFragment, TAG_CAMERA_FRAGMENT)
                .commit();

        //Set the CameraHost
        SimpleCameraHost.Builder builder=
                new SimpleCameraHost.Builder(new SimpleCameraHost(this));

        //SimpleCameraHost simpleCameraHost = new SimpleCameraHost(this);
        cameraFragment.setHost(builder.useFullBleedPreview(true).build());

        takePicture = (Button) findViewById(R.id.buttonPicture);

        //Set an onClickListener for a shutter button
        findViewById(R.id.buttonPicture).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                takePicture();
            }
        });

private void takePicture() {
    CameraFragment f = (CameraFragment) getFragmentManager().findFragmentByTag(TAG_CAMERA_FRAGMENT);
    if (f != null && f.isVisible()) {
        PictureTransaction xact=new PictureTransaction(f.getHost());

    xact.flashMode(Camera.Parameters.FLASH_MODE_AUTO);
    f.takePicture(xact);
    }
}

06-30 15:32:10.661  29474-29823/com.aithops.provrum.app E/dalvikvm-heap﹕ Out of memory on a 31961104-byte allocation.
06-30 15:32:10.661  29474-29823/com.aithops.provrum.app I/dalvikvm﹕ "Thread-32873" prio=5 tid=12 RUNNABLE
06-30 15:32:10.661  29474-29823/com.aithops.provrum.app I/dalvikvm﹕ | group="main" sCount=0 dsCount=0 obj=0x425fcb40 self=0x5976d688
06-30 15:32:10.661  29474-29823/com.aithops.provrum.app I/dalvikvm﹕ | sysTid=29823 nice=0 sched=0/0 cgrp=apps handle=1501887568
06-30 15:32:10.661  29474-29823/com.aithops.provrum.app I/dalvikvm﹕ | state=R schedstat=( 424041835 31308999 114 ) utm=36 stm=5 core=3
06-30 15:32:10.661  29474-29823/com.aithops.provrum.app I/dalvikvm﹕ at android.graphics.Bitmap.nativeCreate(Native Method)
06-30 15:32:10.666  29474-29823/com.aithops.provrum.app I/dalvikvm﹕ at android.graphics.Bitmap.createBitmap(Bitmap.java:726)
06-30 15:32:10.666  29474-29823/com.aithops.provrum.app I/dalvikvm﹕ at android.graphics.Bitmap.createBitmap(Bitmap.java:703)
06-30 15:32:10.666  29474-29823/com.aithops.provrum.app I/dalvikvm﹕ at android.graphics.Bitmap.createBitmap(Bitmap.java:636)
06-30 15:32:10.666  29474-29823/com.aithops.provrum.app I/dalvikvm﹕ at com.commonsware.cwac.camera.ImageCleanupTask.run(ImageCleanupTask.java:121)
06-30 15:32:10.666  29474-29823/com.aithops.provrum.app I/dalvikvm﹕ [ 06-30 15:32:10.666 29474:29823 W/dalvikvm ]
    threadid=12: thread exiting with uncaught exception (group=0x41a33700)
06-30 15:32:10.671  29474-29823/com.aithops.provrum.app E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-32873
    java.lang.OutOfMemoryError
            at android.graphics.Bitmap.nativeCreate(Native Method)
            at android.graphics.Bitmap.createBitmap(Bitmap.java:726)
            at android.graphics.Bitmap.createBitmap(Bitmap.java:703)
            at android.graphics.Bitmap.createBitmap(Bitmap.java:636)
            at com.commonsware.cwac.camera.ImageCleanupTask.run(ImageCleanupTask.java:121)

这是一本书。使用
android:largeHeap=“true”
或让您的
CameraHost
maxPictureCleanCoustapUsage()
返回更接近
0.0f的值。我将如何计算MaxPictureCleanCupanceAppUsage()的合理值?@user2130951:“我将如何计算MaxPictureCleanCupanceAppUsage()的合理值?”--嗯。。。向飞镖板投掷飞镖?:-)说真的,我真的不知道。从长远来看,我希望将所有的图像处理都转移到NDK中,这样我就可以从Dalvik/ART堆中解脱出来。
maxPictureCleanCoustapUsage()
对于那些想要避开
android:largeHeap=“true”
的人来说是一种攻击,但背后没有太多的科学分析。不利的一面是,这意味着某些设备可能无法清理图像,从而导致输出不一致。我只想补充一点——通过在
maxPictureCleanCoustapUsage()
中使用1.0f,它将为您提供一个正确定向的图像,但返回图像需要5-10秒,具体取决于捕获大小。另一方面,使用0.0f将立即返回,但图像可能会旋转。因此,这取决于您是否希望自己处理旋转,例如先调整大小,然后再旋转(要处理的像素数要少),或者在前台进行缩略图旋转,然后在后台进行全尺寸旋转,以避免用户等待。@Commonware版本2的文档似乎与OOM(或内存)没有任何关系。我在第二版中得到了一个OOM,当大堆解决方案工作时,你有没有想出其他方法来处理这个问题?@Shurikn:我不知道“第二版”是什么。如果你的意思是,隔离摄像机的工作。如果你还有房间,给我,我可以调查一下。