每5分钟运行一次的处理程序一式两份运行

时间:2017-12-08 08:05:07

标签: android video android-handler

我的处理程序将每隔5分钟记录一次相机屏幕

最近,我发现处理程序一式两份运行。

处理程序在记录摄像机屏幕之前,创建记录文件名。

如果正常,15:00:00.mp4,15:05:00.mp4,15:10:00.mp4。

但目前我的州是15:00:00.mp4,15:02:15.mp4,15:05:00.mp4,15:07:15.mp4。

似乎重复使用相同的处理程序并执行2。

所以,我想如果有一个处理程序已经工作,删除旧的处理程序,执行新的处理程序。

然后,我认为解决相同的处理程序重复问题。是对吗?

总结一下, 1.在执行handler.sendEmptyMessage之前,是否可以检查相同的处理程序是否正常工作?

  1. 如果可以,则如何删除正在运行的处理程序并仅运行新处理程序。
  2. 目前我的来源。

    private RecHandler mHandler = new RecHandler(this);
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
    ...
        mHandler.sendEmptyMessage(REQUEST_HANDLE_INIT_RECORD);
    }
    

    RecHandler.class

    public class RecHandler extends Handler {
    
       private final SoftReference<MainActivity> weak;
        public RecHandler(MainActivity act) {
           weak = new SoftReference<BlackEyeActivity>(act);
        }
           @Override
           public void handleMessage(Message msg) {
               MainActivity act = weak.get();
               RecHandler mHandler = new RecHandler(act);
    
               if (act != null) {
                   switch (msg.what) {
                        case REQUEST_HANDLE_INIT_RECORD:
                            initCapturing(); //init camera preview..
    
                            mHandler = new RecHandler(act);
                            mHandler.sendEmptyMessageDelayed(REQUEST_HANDLE_START_RECORD, 1000); //after 1 second, start REQUEST_HANDLE_START_RECORD.
                            this.removeMessages(REQUEST_HANDLE_HOLD_RECORD);
                            break;
    
                        case REQUEST_HANDLE_START_RECORD :
                             startRecording(); //start Recording.. record file 5 minute.
                             mHandler.sendEmptyMessageDelayed(REQUEST_HANDLE_HOLD_RECORD, 300000); //after 5 minute, start REQUEST_HANDLE_HOLD_RECORD.
                             this.removeMessages(REQUEST_HANDLE_INIT_RECORD);
                             break;
    
                        case REQUEST_HANDLE_HOLD_RECORD:
                             stopRecording();
    
                             mHandler.sendEmptyMessageDelayed(REQUEST_HANDLE_INIT_RECORD, 1000); //after 1 second, start REQUEST_HANDLE_INIT_RECORD.
                             this.removeMessages(REQUEST_HANDLE_START_RECORD);
                             break;
    

    所以,我的处理程序如果总是记录,重复INIT(1秒) - &gt; START(5分钟) - &gt; HOLD(1秒)

    如果您知道如何检查相同的处理程序是否正常工作,以及如何删除正在运行的处理程序并仅运行新的处理程序。请给我建议。

0 个答案:

没有答案