Garnet-F 2016-07-28 10:29 采纳率: 68%
浏览 2824
已采纳

android 录像界面卡死的问题

我现在线程里面录像哦,移除线程关闭录像之后,屏幕就卡在录像的最后一个画面里面,这是为什么啊


case R.id.avm_record_igview:
// 录制
if(isRecording){
avm_record_igview.setBackgroundResource(R.drawable.ivideo_stop_record_selector);

                // 开启线程
                 handler.post(runnable);
                 isCycle = !isCycle;
            } else {
                avm_record_igview.setBackgroundResource(R.drawable.ivideo_start_record_selector);
                if(true == isCycle){
                    avm_record_igview.setBackgroundResource(R.drawable.ivideo_start_record_selector);
                    stopRecording();

// stopPreview();
// 移掉线程
handler.removeCallbacks(runnable);
//循环取反
isCycle = !isCycle;
}
booleanRecording();
}
break;
}

/**
* 停止录像,并保存
*/
private void stopRecording()
{
if (mMediaRecorder == null)
{
return;
}
try {
mMediaRecorder.stop();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
releaseMediaRecorder();
isRecording = !isRecording;
}

    // ============================= 释放记录器对象 =========================

private void releaseMediaRecorder() {
    if (mMediaRecorder != null) {
        try {
            mMediaRecorder.reset(); // 记录器重置
            mMediaRecorder.release(); // 记录器释放
            mMediaRecorder = null; // 记录器为空

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}


    // ================= 开始线程进行循环录像 ==================
    private Runnable runnable = new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                // 创建录像文件
                fileName = System.currentTimeMillis() + ".mp4"; // 文件名  时间戳.mp4
                absolutePath = Constants.RECORD_VIDEO_PATH + fileName; // 保存路径 + 文件 
                // 在线程中进行录像
                while (isRecording)
                    startRecording(); // 开始录像
                if(true == DEBUG)
                    Log.e(TAG,"startRecording time = "+ System.currentTimeMillis());
                  }catch (Exception e) {  
                    Log.e(TAG,"Looper Recording = "+ e);
             } 
            // 每次时间到之后重启一下线程
            handler.postDelayed(runnable, delayMillis);
        }
    };
  • 写回答

1条回答 默认 最新

  • devmiao 2016-07-28 15:39
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Pwm双极模式H桥驱动控制电机
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题