计时器,计时到几秒,中间打断从新计时 倒计时

package com.transengines.;

import android.app.AlarmManager;
import android.content.Context;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.view.View;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

public class ActionHandling {
    public static final boolean DEBUG = false;
    public static final boolean DEBUG_mHandlerTask = false;
    public static final boolean DEBUG_TAG = false;
    public static final boolean DEBUG_TIME = true;


    /**
     * 构造初始化
     */
    public ActionHandling() {
        //mLastActionTime = System.currentTimeMillis();
        //开始计时
       // startTimer();
       // startTimerIpReset();

        startTimer1();
        startTimerIpReset1();
        //noOperationTimeOut.start();
    }

    
    

        uiManage.uiRegR.setOnClickCallBack(new UIRegR.OnClickCallBack() {
            @Override
            public void onClick(View v) {
                if (playerSpeaker.isPlaying()) {
                    playerSpeaker.clearList(true);
//                    playerSpeaker.stop(true);
                }
                mHandlerTask.sendEmptyMessage(handlerClickButton);
                Message msg = new Message();
                msg.what = handlerTaskEvent;
                Event event = new Event();
                event.setValue(Event.cancelOrReturn, 1);
                msg.obj = event;
                if (DEBUG_mHandlerTask)
                    LogPrint.d("mHandlerTask send event returnCancel button");
                mHandlerTask.sendMessage(msg);
            }

            @Override
            public void onTouch(View v, int type) {
                if (type == 1) {
                    playBuzzer.playError();//每次触碰都响蜂鸣器
                    if (!playerSpeaker.contains(1066)) {
                        playerSpeaker.play(State.OutOfServer, 1066, true);
                    }
                } else if (type == 2) {
                    playBuzzer.playError();//每次触碰都响蜂鸣器
                    if (!playerSpeaker.contains(1065)) {
                        playerSpeaker.play(State.OutOfServer, 1065, true);
                    }
                }
            }
        });
    }

    public static void addEvent(Event event) {
        Message msg = new Message();
        msg.what = handlerTaskEvent;
        msg.obj = event;
        mHandlerTask.sendMessage(msg);
        if (DEBUG_mHandlerTask) {
            LogPrint.d("mHandlerTask send event ");
            event.printEventList(blockEvevt);
        }
    }

    /**
     * 打印未定义事件
     *
     * @param event
     */
    private void printUndefinedEvent(Event event) {
        if (DEBUG_mHandlerTask) {
            LogPrint.d("未定义的事件");
            event.printEventList(blockEvevt);
        }
    }


    private void initHandler() {
        if (mHandlerThreadStateMachine == null) {
            mHandlerThreadStateMachine = new HandlerThread("StateMachineTask");
            mHandlerThreadStateMachine.start();
        }

        if (mHandlerTask == null) {
            mHandlerTask = new Handler(mHandlerThreadStateMachine.getLooper()) {

                @Override
                public void handleMessage(Message msg) {
                    switch (msg.what) {
                        case handlerFactorySettings:
                            globalValue.updateUI.post(new Runnable() {
                                @Override
                                public void run() {
                                    uiManage.uiRegN.getFloorDataAndRefresh();
                                    if (ActionHandling.signalProcess != null) {
                                        ActionHandling.signalProcess.setSendEnable(true);
                                        ActionHandling.signalProcess.setReceEnable(true);
                                        ActionHandling.signalProcess.setHeartBeatEnable(true);
                                        ActionHandling.signalProcess.sendResetMPU();
                                    }
                                }
                            });

                            break;
                        case handlerTaskEvent:
                            //事件处理
                            Event event = (Event) msg.obj;
                            if (event == null) {
                                LogPrint.d("event is null! skip.");
                                return;
                            }

                            if (DEBUG_mHandlerTask) {
                                LogPrint.d("mHandlerTask rece event");
//                                event.printEventList(blockEvevt);
                                event.printEventList(null);
                            }
                            changeStateByEvent(event);
                            break;
                        case handlerTaskUI:
                            //界面更改
                            if (DEBUG_mHandlerTask)
                                LogPrint.d("mHandlerTask rece event change ui " + msg.arg1);
                            changeUIByState(msg.arg1);
                            break;
                        case handlerTimeTask:
                            LogPrint.e("====handlerTimeTask====1");
                            Calendar calendar = (Calendar) msg.obj;
//                            calendar.setTimeInMillis(1603158733918L);
//                            calendar.set(Calendar.YEAR, 2020);
//                            calendar.set(Calendar.MONTH, 9);
//                            calendar.set(Calendar.DAY_OF_MONTH, 10);
//                            calendar.set(Calendar.HOUR_OF_DAY, 22);
//                            calendar.set(Calendar.MINUTE, 18);
                            long when = calendar.getTimeInMillis();

//                            android.provider.Settings.Global.putInt(globalValue.mContext.getContentResolver(),
//                                    android.provider.Settings.Global.AUTO_TIME_ZONE, 0);
                            android.provider.Settings.System.putString(globalValue.mContext.getContentResolver(),
                                    android.provider.Settings.System.TIME_12_24, "24");
                            if (when / 1000 < Integer.MAX_VALUE) {
                                LogPrint.e( "====handlerTimeTask=222=" + when+"==="+System.currentTimeMillis());
                                LogPrint.e( "====handlerTimeTask=333=" + (when -System.currentTimeMillis()));
//                                SystemClock.setCurrentTimeMillis(when);
                                ((AlarmManager) globalValue.mContext.getSystemService(Context.ALARM_SERVICE)).setTime(when);
                            }

//                            long now = Calendar.getInstance().getTimeInMillis();
//                            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//                            String dateString = formatter.format(now);
//                            LogPrint.d("=====time set tm=" + when + ", now tm=" + now + ",  " + dateString);
                            break;
                        case handlerClickScreen:
                            uiManage.uiRegN.setUIDormancyHide();
                            uiManage.uiRegR.setUIDormancyHide();
                            uiManage.uiRegD.setUIDormancyHide();
                            resetScreenTimeOut();
                            break;
                        case handlerClickButton:
                            resetScreenTimeOut();
                            playBuzzer.playNormal();
                            break;
                        case handlerSaveEnergy:
                            if (DEBUG_TIME)
                                LogPrint.e("======进行屏幕亮度的调节");
                            //接到屏幕无操作超时时,进行屏幕亮度的调节
                            globalValue.updateUI.post(new Runnable() {
                                @Override
                                public void run() {
                                    uiManage.uiRegN.setUIDormancyShow();
                                    uiManage.uiRegR.setUIDormancyShow();
                                    uiManage.uiRegD.setUIDormancyShow();
                                    SystemUtil.setBackLight((float) (ConfigManage.jsonBean.getDisplay().getBrightnessEnergy() / 100.0));
                                    File file = new File("/sdcard/usb-ts-error");
                                    try {
                                        file.createNewFile();
                                    } catch (IOException e) {
                                    }
                                }
                            });
                            break;
                        case handlerSaveEnergyIpReset:
                            if (DEBUG_TIME)
                                LogPrint.d("======进行屏幕亮度的调节handlerSaveEnergyIpReset");
                            //接到屏幕无操作超时时,进行屏幕亮度的调节
                            globalValue.updateUI.post(new Runnable() {
                                @Override
                                public void run() {
                                    File file = new File("/sdcard/usb-ts-error");
                                    try {
                                        file.createNewFile();
                                    } catch (IOException e) {
                                    }
                                }
                            });
                            break;
                        case handlerRefreshFloorButton:
                            if (DEBUG)
                                LogPrint.d("flush floor button");
                            uiManage.uiRegN.showExtFloor();
                            break;
                        default:
                            break;
                    }
                }
            };
        }
    }

  
   


   


 

    private void resetScreenTimeOut() {
        if (DEBUG_TIME)
            LogPrint.e("=====中断");
        globalValue.isTimeForEnergy = false;
       /* endDate = new Date(System.currentTimeMillis());
        synchronized (noOperationTimeOut) {
            noOperationTimeOut.interrupt();
            noOperationTimeOut.notify();
        }*/
        // 停止计时任务
       /* stopTimer();
        stopTimerIpReset();

        startTimer();
        startTimerIpReset();*/


        stopTimer1();
        stopTimerIpReset1();

        startTimer1();
        startTimerIpReset1();

        globalValue.updateUI.post(new Runnable() {
            @Override
            public void run() {
                SystemUtil.setBackLight((float) (ConfigManage.jsonBean.getDisplay().getBrightness() / 100.0));
            }
        });
    }


    private Timer mTimer; //计时器,每1秒执行一次任务
    private MyTimerTask mTimerTask; //计时任务,判断是否未操作时间到达3s
    private long mLastActionTime; //上一次操作时间
    long timeForEnergy = ConfigManage.jsonBean.getDisplay().getTimeForEnergy() * 60 * 1000;

    private class MyTimerTask extends TimerTask {
        @Override
        public void run() {
            //3s未操作,则结束计时
            if (DEBUG_TIME)
                LogPrint.e("======3s未操作,则结束计时" + (System.currentTimeMillis() - mLastActionTime) + "====" + timeForEnergy);
            if (System.currentTimeMillis() - mLastActionTime > timeForEnergy) {
                if (DEBUG_TIME)
                    LogPrint.e("======3屏幕变暗");
                //结束计时
                removeTimer();
                // 停止计时任务
                stopTimer();
            }
        }
    }

    //开始计时
    private void startTimer() {
        if (ConfigManage.jsonBean.getDisplay().getTimeForEnergy() != 0) {
            mTimer = new Timer(true);
            mTimerTask = new MyTimerTask();
            mTimer.schedule(mTimerTask, 0, 1000); //延时1000ms后执行,1000ms检查一次
            // 初始化上次操作时间为登录成功的时间
            mLastActionTime = System.currentTimeMillis();
        }
    }



    //倒计时完毕的操作
    private void removeTimer() {
        if (DEBUG_TIME)
            LogPrint.e("=====removeTimer");
        if (globalValue.isUIBrightness) {
            if (DEBUG_TIME)
                LogPrint.e("=====removeTimer====1111");
            globalValue.isTimeForEnergy = true;
            ActionHandling.mHandlerTask.sendEmptyMessage(handlerSaveEnergy);
        }
    }

    // 停止计时任务
    private void stopTimer() {
        if (DEBUG_TIME)
            LogPrint.e("=====stopTimer");
        if (mTimer != null) {
            mTimer.cancel();
            mTimer = null;
        }

        if(mTimerTask!=null){
            mTimerTask.cancel();
            mTimerTask=null;
        }
    }


    static Date curDate, endDate;
    private Thread noOperationTimeOut = new Thread() {
        @Override
        public void run() {
            while (true) {
                try {
                    if (ConfigManage.jsonBean.getDisplay().getTimeForEnergy() == 0) {
                        synchronized (this) {
                            this.wait();
                        }
                        continue;
                    }
                    curDate = new Date(System.currentTimeMillis());
                    endDate = new Date(System.currentTimeMillis());
                    long timeForEnergy = ConfigManage.jsonBean.getDisplay().getTimeForEnergy() * 60 * 1000;
                    sleep(timeForEnergy);
                    //判断是否要延迟时间
                    while (true) {
                        long time = endDate.getTime() - curDate.getTime();
                        if (time < 1000) {
                            break;
                        }
                        if (0 < time && time < timeForEnergy) {
                            sleep(timeForEnergy - time);
                        } else {
                            break;
                        }
                    }
                    if (globalValue.isUIBrightness) {
                        globalValue.isTimeForEnergy = true;
                        ActionHandling.mHandlerTask.sendEmptyMessage(handlerSaveEnergy);
                    }
                } catch (InterruptedException e) {

                }
            }
        }
    };


    Timer mTimerIpReset; //计时器,每1秒执行一次任务
    private MyTimerTaskIpReset mTimerTaskIpReset; //计时任务,判断是否未操作时间到达3s
    private long mLastActionTimeIpReset; //上一次操作时间
    long timeForEnergyIpReset = ConfigManage.jsonBean.getDisplay().getIpResetSetting() * 1000;

    private class MyTimerTaskIpReset extends TimerTask {
        @Override
        public void run() {
            //3s未操作,则结束计时
            if (DEBUG_TIME)
                LogPrint.d("======3s未操作,MyTimerTaskIpReset" + (System.currentTimeMillis() - mLastActionTimeIpReset) + "====" + timeForEnergyIpReset);
            if (System.currentTimeMillis() - mLastActionTimeIpReset > timeForEnergyIpReset) {
                if (DEBUG_TIME)
                    LogPrint.d("======3屏幕变暗MyTimerTaskIpReset");
                //结束计时
                removeTimerIpReset();
                // 停止计时任务
                stopTimerIpReset();
            }
        }
    }


    //开始计时
    private void startTimerIpReset() {
        if (ConfigManage.jsonBean.getDisplay().getTimeForEnergy() != 0
                && ConfigManage.jsonBean.getDisplay().getIpResetSetting() != 0) {
            mTimerIpReset = new Timer(true);
            mTimerTaskIpReset = new MyTimerTaskIpReset();
            mTimerIpReset.schedule(mTimerTaskIpReset, 0, 1000); //延时1000ms后执行,1000ms检查一次
            // 初始化上次操作时间为登录成功的时间
            mLastActionTimeIpReset = System.currentTimeMillis();
        }
    }


    //倒计时完毕的操作
    private void removeTimerIpReset() {
        if (DEBUG_TIME)
            LogPrint.d("=====removeTimerIpReset");
        if (globalValue.isUIBrightness) {
            if (DEBUG_TIME)
                LogPrint.d("=====removeTimerIpReset====1111");
            //globalValue.isTimeForEnergy = true;
            ActionHandling.mHandlerTask.sendEmptyMessage(handlerSaveEnergyIpReset);
        }
    }

    // 停止计时任务
    private void stopTimerIpReset() {
        if (DEBUG_TIME)
            LogPrint.d("=====removeTimerIpReset");
        if (mTimerIpReset != null) {
            mTimerIpReset.cancel();
            mTimerIpReset = null;
        }

        if(mTimerTaskIpReset!=null){
            mTimerTaskIpReset.cancel();
            mTimerTaskIpReset = null;
        }
    }






//========================================================
    //开始计时
    boolean isRunning;
    private void startTimer1() {
        if (ConfigManage.jsonBean.getDisplay().getTimeForEnergy() != 0) {
            if(timer1 == null){
                getCountDownTimer();
            }
            timer1.start();
        }
    }

    private CountDownTimer timer1;
    public void getCountDownTimer(){
        timer1 = new CountDownTimer(timeForEnergy, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                isRunning=true;
                LogPrint.e("======88888===="+millisUntilFinished / 1000);
            }
            @Override
            public void onFinish() {
                isRunning=false;
                LogPrint.e("======88888====onFinish");
                removeTimer1();
                stopTimer1();
            }
        };
    }

    // 停止计时任务
    private void stopTimer1() {
        if (DEBUG_TIME)
            LogPrint.e("=====88888stopTimer停止");
        if (timer1 != null) {
            timer1.cancel();
            timer1 = null;
            isRunning=false;
        }
    }


    //倒计时完毕的操作
    private void removeTimer1() {
        if (DEBUG_TIME)
            LogPrint.e("=====removeTimer");
        if (globalValue.isUIBrightness) {
            if (DEBUG_TIME)
                LogPrint.e("=====removeTimer====1111");
            globalValue.isTimeForEnergy = true;
            ActionHandling.mHandlerTask.sendEmptyMessage(handlerSaveEnergy);
        }
    }

//========================================================

    //开始计时
    boolean isRunningIpReset1;
    private void startTimerIpReset1() {
        if (ConfigManage.jsonBean.getDisplay().getTimeForEnergy() != 0
                && ConfigManage.jsonBean.getDisplay().getIpResetSetting() != 0) {
            if(timerIpReset1 == null){
                getCountDownTimerIpReset1();
            }
            timerIpReset1.start();
        }
    }

    private CountDownTimer timerIpReset1;
    public void getCountDownTimerIpReset1(){
        timerIpReset1 = new CountDownTimer(timeForEnergyIpReset, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                isRunningIpReset1=true;
                LogPrint.e("======88888===="+millisUntilFinished / 1000);
            }
            @Override
            public void onFinish() {
                isRunningIpReset1=false;
                LogPrint.e("======88888====onFinish");
                removeTimerIpReset1();
                stopTimerIpReset1();
            }
        };
    }

    // 停止计时任务
    private void stopTimerIpReset1() {
        if (DEBUG_TIME)
            LogPrint.e("=====88888stopTimer停止");
        if (timerIpReset1 != null) {
            timerIpReset1.cancel();
            timerIpReset1 = null;
            isRunningIpReset1=false;
        }
    }


    //倒计时完毕的操作
    private void removeTimerIpReset1() {
        if (DEBUG_TIME)
            LogPrint.e("=====removeTimer");
        if (globalValue.isUIBrightness) {
            if (DEBUG_TIME)
                LogPrint.e("=====removeTimer====1111");
            globalValue.isTimeForEnergy = true;
            ActionHandling.mHandlerTask.sendEmptyMessage(handlerSaveEnergyIpReset);
        }
    }


}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值