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

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
    已采纳
    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题