zoukankan      html  css  js  c++  java
  • 一手遮天 Android

    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

    一手遮天 Android - 异步和多线程: Timer 和 TimerTask 的使用

    示例如下:

    /async/TimerDemo1.java

    /**
     * Timer 和 TimerTask 的使用(Timer 用于延迟或循环执行 TimerTask)
     *
     * Timer - 计时器
     *     new Timer(boolean isDaemon) - 实例化 Timer 并指定其是否是守护线程
     *     schedule(TimerTask task, long delay) - 延迟指定的时间后执行指定的 TimerTask 任务
     *     schedule(TimerTask task, long delay, long period) - 延迟指定的时间后,按照间隔时间循环执行指定的 TimerTask 任务
     *         间隔时间指的是相对于上一次 task 任务执行完成之后的时间
     *     scheduleAtFixedRate(TimerTask task, long delay, long period) - 延迟指定的时间后,按照间隔时间循环执行指定的 TimerTask 任务
     *         间隔时间指的尽量按此时间为周期循环执行 task 任务
     *     cancel() - 把当前任务队列中的所有 TimerTask 任务都取消
     *     purge() - 把当前任务队列中的所有被标记为取消的 TimerTask 任务的引用都设置为 null
     *
     * TimerTask - 计时器需要执行的具体任务(实现了 Runnable 接口)
     *     cancel() - 把当前 TimerTask 任务从任务队列中取消
     *
     *
     * 注:一个 Timer 对象只会有一个关联的 Thread
     */
    
    package com.webabcd.androiddemo.async;
    
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import com.webabcd.androiddemo.R;
    
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class TimerDemo1 extends AppCompatActivity {
    
        private TextView _textView1;
        private Button _button1;
        private Button _button2;
    
        private Timer mTimer;
        private TimerTask mTimerTask = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_async_timerdemo1);
    
            _textView1 = (TextView) findViewById(R.id.textView1);
            _button1 = (Button) findViewById(R.id.button1);
            _button2 = (Button) findViewById(R.id.button2);
    
            sample();
        }
    
        private void sample() {
            _button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    stopTimer();
                    // Timer(boolean isDaemon) - 实例化 Timer
                    //     isDaemon 设置为 false - 用户线程,主线程结束了,用户线程也不会退出,相当于前台线程,此值为默认值
                    //     isDaemon 设置为 true - 守护线程,主线程结束了,守护线程会自动退出,相当于后台线程
                    mTimer = new Timer(true);
    
                    // schedule(TimerTask task, long delay) - 延迟指定的时间(单位:毫秒)后执行指定的 TimerTask 任务
                    mTimer.schedule(new TimerTask() {
                        @Override
                        public void run() {
                            writeMessage("delay");
                        }
                    }, 1000);
    
                    // 实例化一个 TimerTask
                    mTimerTask = new TimerTask()
                    {
                        @Override
                        public void run() {
                            writeMessage("period");
                        }
                    };
                    // schedule(TimerTask task, long delay, long period)
                    //     延迟 delay 指定的时间(单位:毫秒)后执行 task 任务,并且每隔 period 指定的时间(单位:毫秒)后循环执行 task 任务
                    //     注:period 间隔时间指的是相对于上一次 task 任务执行完成之后的时间
                    // scheduleAtFixedRate(TimerTask task, long delay, long period)
                    //     延迟 delay 指定的时间(单位:毫秒)后执行 task 任务,并且每隔 period 指定的时间(单位:毫秒)后循环执行 task 任务
                    //     注:period 间隔时间指的尽量按此时间为周期循环执行 task 任务
                    mTimer.schedule(mTimerTask, 0, 2000);
                }
            });
    
            _button2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    // 停止计时器
                    stopTimer();
                }
            });
        }
    
        // 停止计时器
        private void stopTimer() {
            if (mTimerTask != null)
            {
                // 把当前 TimerTask 任务从任务队列中取消
                mTimerTask.cancel();
                mTimerTask = null;
            }
            if (mTimer != null)
            {
                // 把当前任务队列中的所有 TimerTask 任务都取消
                mTimer.cancel();
                // 把当前任务队列中的所有被标记为取消的 TimerTask 任务的引用都设置为 null
                mTimer.purge();
                mTimer = null;
            }
        }
    
        @Override
        public void onDestroy() {
            stopTimer();
    
            super.onDestroy();
        }
    
        private void writeMessage(final String message) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    String timeString = df.format(new Date());
    
                    _textView1.append(String.format("%s %s
    ", timeString, message));
                }
            });
        }
    }
    
    

    /layout/activity_async_timerdemo1.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="启动 Timer" />
    
        <Button
            android:id="@+id/button2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="停止 Timer" />
    
    </LinearLayout>
    

    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

  • 相关阅读:
    jMeter 里 CSV Data Set Config Sharing Mode 的含义详解
    如何使用 jMeter Parallel Controller
    使用 Chrome 开发者工具 coverage 功能分析 web 应用的渲染阻止资源的执行分布情况
    使用 Chrome 开发者工具的 lighthouse 功能分析 web 应用的性能问题
    关于 SAP 电商云首页加载时触发的 OCC API 请求
    SAP UI5 确保控件 id 全局唯一的实现方法
    SAP 电商云 Accelerator 和 Spartacus UI 的工作机制差异
    介绍一个好用的能让网页变成黑色背景的护眼 Chrome 扩展应用
    Chrome 开发者工具 performance 标签页的用法
    Client Side Cache 和 Server Side Cache 的区别
  • 原文地址:https://www.cnblogs.com/webabcd/p/android_async_TimerDemo1.html
Copyright © 2011-2022 走看看