Android 定时器

Andorid定时器封装类

public class TimerUtil {
    private static final String TAG = "TimerUtil";

    private static Handler  mTimeHandler   = null;
    private static boolean  mTimerMark     = false;
    private static Runnable mTimerRunnable = null;
    private static int      mUpdateTime    = 0;

    private TimerUtil() {
    };

    /**
     * 定时器开始定时
     *
     * @param doThing 定时器处理事情
     * @param updateTime 定时器时间
     * @since V1.0
     */
    public static void startTime(Runnable doThing, int updateTime) {
        if (null == doThing || updateTime < 0) {
            return;
        }

        if (null == mTimeHandler) {
            mTimeHandler = new Handler();
            mTimerRunnable = doThing;
            mUpdateTime = updateTime;
            mTimerMark = true;
        }

        if (mTimerMark) {
            mTimeHandler.postDelayed(mTimerRunnable, 0);
        } else {
            mTimeHandler.postDelayed(null, 0);
        }
    }

    /**
     * 定时器开始定时
     *
     * @param doThing 定时器处理事情
     * @param updateTime 定时器时间
     * @param mode 定时器模式
     * @since V1.0
     */
    public static void startTime(Runnable doThing, int updateTime, boolean mode) {
        if (null == doThing || updateTime < 0) {
            return;
        }

        if (null == mTimeHandler) {
            mTimeHandler = new Handler();
            mTimerRunnable = doThing;
            mUpdateTime = updateTime;
            mTimerMark = true;
        }

        if (mTimerMark) {
            if (mode) {
                mTimeHandler.postDelayed(mTimerRunnable, 0);
            } else {
                mTimeHandler.postDelayed(mTimerRunnable, updateTime);
            }
        } else {
            mTimeHandler.postDelayed(null, 0);
        }
    }

    /**
     * 这里对方法做描述
     *
     * @since V1.0
     */
    public static void updataTime() {
        if (mTimerMark) {
            mTimeHandler.postDelayed(mTimerRunnable, mUpdateTime);
        } else {
            mTimeHandler.postDelayed(null, 0);
        }
    }

    /**
     * 这里对方法做描述
     *
     * @since V1.0
     */
    public static void stopTime() {
        mTimerMark = false;
        if (null != mTimeHandler) {
            mTimeHandler.removeCallbacks(mTimerRunnable);
            mTimeHandler = null;
        }
    }

    /**
     * time格式 String型的日 如:昨天、今天、8月24日 15:30
     * @param ltime
     * @param context
     * @return
     * @since V1.0
     */
   public synchronized static String getTime_FormatTime_MMDD(long ltime, Context context) {
       String time = "";

       Calendar dateCalendar = Calendar.getInstance();
       dateCalendar.setTimeInMillis(ltime);

       Calendar targetCalendar = Calendar.getInstance();
       targetCalendar.set(Calendar.HOUR_OF_DAY, 0);
       targetCalendar.set(Calendar.MINUTE, 0);

       if (dateCalendar.after(targetCalendar)) {
           time = context.getString(R.string.today) +" "+ time;
           return time;
       } else {
           targetCalendar.add(Calendar.DATE, -1);
           if (dateCalendar.after(targetCalendar)) {
               time = context.getString(R.string.yesterday) +" "+ time;
               return time;
           }
       }

       String otherSDF = context.getString(R.string.mmdd);
       Date date = dateCalendar.getTime();
       SimpleDateFormat sfd = new SimpleDateFormat(otherSDF);
       time = sfd.format(date);
       CLog.d(TAG, "getTime_FormatTime_MMDD time:"+time);
       return time;
   }

    /**
      * time格式 String型的日 如:昨天、今天、8月24日 15:30
      * @param ltime
      * @param context
      * @return
      * @since V1.0
      */
    public synchronized static String getTime_FormatTime_MMDDHHMM(long ltime, Context context) {
        String time = "";

        Calendar dateCalendar = Calendar.getInstance();
        dateCalendar.setTimeInMillis(ltime);

        int month = dateCalendar.get(Calendar.MONTH) + 1;
        int day = dateCalendar.get(Calendar.DAY_OF_MONTH);
        int hour = dateCalendar.get(Calendar.HOUR_OF_DAY);
        int minute = dateCalendar.get(Calendar.MINUTE);

        time = String.format("%02d:%02d", hour, minute);

        Calendar targetCalendar = Calendar.getInstance();
        targetCalendar.set(Calendar.HOUR_OF_DAY, 0);
        targetCalendar.set(Calendar.MINUTE, 0);
        if (dateCalendar.after(targetCalendar)) {
            time = context.getString(R.string.today) +" "+ time;
            return time;
        } else {
            targetCalendar.add(Calendar.DATE, -1);
            if (dateCalendar.after(targetCalendar)) {
                time = context.getString(R.string.yesterday) +" "+ time;
                return time;
            }
        }

        time = String.format(Locale.ENGLISH,"%02d-%02d %02d:%02d", month, day, hour, minute);
        CLog.d(TAG, "getTime_FormatTime_MMDDHHMM time:"+time);
        return time;
    }

    /**
     * 这里对方法做描述
     *
     * @return time格式 nnnn-mm-dd hh:mm:ss
     * @since V1.0
     */
    public synchronized static String getTime_nnnnyydd(long t) {
        if (t == 0) {
            return "";
        }

        Calendar cale = Calendar.getInstance();
        cale.setTimeInMillis(t);
        int year = cale.get(Calendar.YEAR);
        int month = cale.get(Calendar.MONTH) + 1;
        int day = cale.get(Calendar.DAY_OF_MONTH);
        int hour = cale.get(Calendar.HOUR_OF_DAY);
        int minute = cale.get(Calendar.MINUTE);
        int second = cale.get(Calendar.SECOND);

        String time = String.format(Locale.ENGLISH, "%d-%02d-%02d %02d:%02d:%02d",  year, month, day, hour, minute, second);
        CLog.d(TAG, "getTime_nnnnyydd time:"+time);
        return time;
    }

    /**
     * 这里对方法做描述
     *
     * @return time格式 nnnn-mm-dd hh:mm:ss
     * @since V1.0
     */
    public synchronized static String getTime_nnnnyydd(Calendar cale) {
        if (cale == null) {
            return "";
        }

        int year = cale.get(Calendar.YEAR);
        int month = cale.get(Calendar.MONTH) + 1;
        int day = cale.get(Calendar.DAY_OF_MONTH);
        int hour = cale.get(Calendar.HOUR_OF_DAY);
        int minute = cale.get(Calendar.MINUTE);
        int second = cale.get(Calendar.SECOND);
        String time = String.format(Locale.ENGLISH,"%d-%02d-%02d %02d:%02d:%02d", year,month,day, hour, minute, second);
        CLog.d(TAG, "getTime_nnnnyydd time:" + time);
        return time;
    }
}
时间: 2024-10-23 23:23:07

Android 定时器的相关文章

Android定时器,更新数据

做个笔记,Android中常用的定时器,用于定时更新ui数据等. 1.Handler + Runnable定时器 private Handler mHandler; private Runnable mRunnable; mHandler = new Handler(); mRunnable = new Runnable() { public void run () { //更新数据的方法 update(); } }; //定时启动线程(执行的线程,时间毫秒) mHandler.postDela

Android定时器,推荐ScheduledThreadPoolExecutor

Android定时器,推荐ScheduledThreadPoolExecutor 官方网址:http://developer.android.com/reference/java/util/Timer.html 实现定时器的功能,有如下几种方法:1.Thread的sleep(long)方法2.Handler的postDelayed(Runnable, long)方法3.Timer与TimerTask结合的方法这3种方法,本质上是一样的,都跟线程相关:这里主要讲下Timer. 定时器可以有个名称(

【转】Android 定时器实现的几种方式和removeCallbacks失效问题详解--不错

原文网址:http://blog.csdn.net/xiaanming/article/details/9011193 实现定时器有很多种方式,在这里我简单的介绍几种方式 (1)使用Handler + Runnable的方式 [java] view plaincopy Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { //你要做的事 //.....

android 定时器的实现

在Android上常用的定时器有两种,一种是Java.util.Timer,一种就是系统的AlarmService了. 实验1:使用Java.util.Timer. 在onStart()创创建Timer,每5秒更新一次计数器,并启动. mTimer = new Timer();       mTimer.schedule(new TimerTask() {                       @Override             public void run() {       

Android定时器功能实现方法

在Android开发中,定时器一般有以下3种实现方法: 1.采用Handler与线程的sleep(long)方法 2.采用Handler的postDelayed(Runnable, long)方法 3.采用Handler与timer及TimerTask结合的方法 下面逐一介绍: 一.采用Handle与线程的sleep(long)方法 Handler主要用来处理接受到的消息.这只是最主要的方法,当然Handler里还有其他的方法供实现,有兴趣的可以去查API,这里不过多解释. 1.定义一个Hand

Android 定时器实现的几种方式和removeCallbacks失效问题详解

实现定时器有很多种方式,在这里我简单的介绍几种方式 (1)使用Handler + Runnable的方式 [java] view plain copy 在CODE上查看代码片派生到我的代码片 Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { //你要做的事 //...... System.out.println(Thread.currentThre

android 定时器的使用

1.android中通常是使用AlarmManager来定时启动一个单次或重复多次操作的.具体的说就是我们通过AlarmManager设定一个时间和注册一个intent到系统中,然后在该时间到来时,系统为我们发送一个广播,即执行我们设定的Intent(要执行的操作),通常我们使用 PendingIntent来实现“要执行的操作”,PendingIntent可以理解为Intent的封装包,简单的说就是将来要执行的Intent操作.他们的区别是:在使用Intent的时候,我们还需要在执行startA

Android定时器实现方法[转]

在android中,经常用到的定时器主要有以下几种实现:一.采用Handler与线程的sleep(long )方法二.采用Handler的postDelayed(Runnable, long) 方法三.采用Handler与timer及TimerTask结合的方法.下面逐一介绍:一.采用Handle与线程的sleep(long )方法Handler主要用来处理接受到的消息.这只是最主要的方法,当然Handler里还有其他的方法供实现,有兴趣的可以去查API,这里不过多解释.1.定义一个Handle

android 定时器AlarmManager

1.android中通常是使用AlarmManager来定时启动一个单次或重复多次操作的.具体的说就是我们通过AlarmManager设定一个时间和注册一个intent到系统中,然后在该时间到来时,系统为我们发送一个广播,即执行我们设定的Intent(要执行的操作),通常我们使用 PendingIntent来实现“要执行的操作”,PendingIntent可以理解为Intent的封装包,简单的说就是将来要执行的Intent操作.他们的区别是:在使用Intent的时候,我们还需要在执行startA

android 定时器(Handler Timer Thread AlarmManager CountDownTimer)

Android实现定时任务一般会使用以上(Handler Timer Thread AlarmManager CountDownTimer)五种方式.当然还有很多组合使用(比如Handler+Thread 比如Handler类自带的postDelyed 比如Handler+Timer+TimerTask)的方式就不一一说明了,知道了每个小部分的使用结合起来使用当然就不是问题啦. 本文以简单的实现1s让数字加1的一个小实例.(考虑只点击一次的情况.连续点击 需要控制没有结束的时候 不许点击的逻辑)