首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的相机应用程序崩溃了?

为什么我的相机应用程序崩溃了?
EN

Stack Overflow用户
提问于 2012-04-21 03:32:25
回答 2查看 1.5K关注 0票数 0

API 15.当我拍摄一张照片后停止相机,转到主屏幕,重新打开我的应用程序并尝试拍摄另一张照片时,我的应用程序崩溃,并收到以下错误:

代码语言:javascript
复制
04-20 12:04:38.437: E/AndroidRuntime(5150): FATAL EXCEPTION: Timer-2
04-20 12:04:38.437: E/AndroidRuntime(5150): java.lang.RuntimeException: Method called after release()
04-20 12:04:38.437: E/AndroidRuntime(5150):     at android.hardware.Camera.native_takePicture(Native Method)
04-20 12:04:38.437: E/AndroidRuntime(5150):     at android.hardware.Camera.takePicture(Camera.java:947)
04-20 12:04:38.437: E/AndroidRuntime(5150):     at android.hardware.Camera.takePicture(Camera.java:892)
04-20 12:04:38.437: E/AndroidRuntime(5150):     at com.prism.app.PrismActivity$5.run(PrismActivity.java:167)
04-20 12:04:38.437: E/AndroidRuntime(5150):     at java.util.Timer$TimerImpl.run(Timer.java:284)


public void surfaceCreated(SurfaceHolder holder) {
    // The Surface has been created, now tell the camera where to draw the preview.
    if (mCamera == null) {
        try {
            mCamera = Camera.open();
            mCamera.setPreviewDisplay(holder);
            mCamera.setDisplayOrientation(90);
            mCamera.startPreview();
        } catch (IOException e) {
            // error setting preview of camera
        }
    } else {
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    // empty. Take care of releasing the Camera preview in your activity.
    if (mCamera != null) {
        mCamera.setPreviewCallback(null);
        mCamera.stopPreview();
        mCamera.release(); //need to take care of case when app is not closed completely still need to release
        mCamera = null;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-21 03:40:45

从堆栈跟踪来看,您似乎有一些TimerTask仍计划执行,它使用相机。它会在你关闭相机后触发,因此会出现错误。您需要取消Timer,并且还要准备好在您取消之前最后一个TimerTask可能正在进行。因此,在操作摄像头之前,任务需要检查摄像头是否关闭。

票数 0
EN

Stack Overflow用户

发布于 2012-04-21 03:38:22

本质上,您是在调用mCamera对象的release方法并在其本机代码中释放该对象之后尝试使用该对象。

该对象仍然存在(因此您的mCamera == null计算结果为false),但是如果不创建一个新的对象或再次调用一个获取本机资源的方法,就不能再使用该对象。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10252438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档