464637258 2016-01-27 02:41 采纳率: 57.1%
浏览 1817
已采纳

Android拍照onActivityResult的奇怪BUG

这个BUG是一个很奇怪的问题,调用系统相机拍照(在别人的手机上还有美颜相机,美颜相机很容易出这个问题,系统相机不太容易出)
第一次遇到这种特别奇葩的问题,完全跟踪不到,无论如何都没有任何错误输出,没有任何提示无征兆的闪退。
具体就是传入一个指定文件作为拍照文件。如下:

         Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (picturesUploadAndEditView != null){
            picturesUploadAndEditView.dissmissDialog();
        }
        tempPhotoPath = getTempImage();
        if (tempPhotoPath == null || tempPhotoPath.trim().equals("")){
            Toast.makeText(MyApplication.getInstance(), getResources().getString(R.string.sd_error), Toast.LENGTH_LONG);
            return;
        }
        File tempFile = new File(tempPhotoPath);
        Uri imageUri = Uri.fromFile(tempFile);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        startActivityForResult(intent, ACTION_TAKE_PHOTO);

getTempImage()是一个自动生成照片保存路径的方法。
但是拍照完毕后 大概有20%左右几率,程序会直接闪退。经过调试发现是tempPhotoPath变成了null.加了try catch捕获异常并加Toash提示却无效,Toash根本不出程序就直接闪退了。后来我甚至把整个onActivityResult都加try里面了,但是还可能闪退,奇怪的是,闪退没有任何的错误输出,后来我在代码里逐行加调试输出跟踪,发现只要执行了return,就没有然后了,执行完了,程序不是回到原来的地方而是闪退出去,没报错信息。后来加了UncaughtExceptionHandler试图捕获错误输错却根本没进入到那里面去。求解,彻底没有任何思路了。

  • 写回答

6条回答 默认 最新

  • 464637258 2016-01-29 03:24
    关注

    测试了半天,经过查找资料终于发现问题。
    在调用相机过后,拍照时候可能原来的应用已经被回收了。尤其是同事用美颜相机测试,可能占用内存过大,直接kill掉了。
    我发现在这种情况下,返回原activity的onActivityResult,返回数据都正常的,照片也确实拍到了找得到,只是原来activity内的成员变量都没了,或者说,整个application貌似都销毁了,所有数据都没了。
    所以看似好像就是程序彻底闪退一样。其实并没有发生异常,只是APP都没了还玩个毛线啊。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 Workbench中材料库无法更新,如何解决?
  • ¥20 如何推断此服务器配置
  • ¥15 关于github的项目怎么在pycharm上面运行
  • ¥15 内存地址视频流转RTMP
  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败