首页 > 其他分享 >Android 定时器简单使用及学习

Android 定时器简单使用及学习

时间:2023-10-08 18:59:40浏览次数:28  
标签:定时器 Message void 学习 Handler Override new Android public

本文,介绍常用定时器实现方式:

1)Handler+Sleep方式

2)Handler+PostDelayed方式

3)Handler+Timer方式

Handler的主要作用就是用来处理接收到的信息,用Handler消息传递机制是为了多个线程 并发 更新U的同时,保证线程安全

1)Handler+Sleep方式

1.1)Handler+Sleep定义

public class HandlerAndSleep {

    public HandlerAndSleep()
    {
    }

    //定义Handler对象,用于处理接收Message
    Handler handler = new Handler(Looper.getMainLooper()){

        @Override
        public void handleMessage(@NonNull Message msg){
            super.handleMessage(msg);
            Log.d("HandlerAndSleep","HandlerAndSleep,时间:"+  ToolHelper.GetNowDate());
        }
    };
    //新建一个实现Runnable接口的线程类
    class MyThread implements Runnable{
        @Override
        public void run() {
            while (true){
                try {
                    Thread.sleep(1000);
                    Message message = new Message();
                    message.what = 1;
                    handler.sendMessage(message);

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //开启
    public void Start(){
        new Thread(new MyThread()).start();
    }
    //关闭(存在问题,无法使用)
    public void Stop(){
        new Thread(new MyThread()).stop();
    }
}

1.2)Handler+Sleep调用

public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
//HandlerAndSleep实现定时器调用 HandlerAndSleep handlerAndSleep = new HandlerAndSleep(); handlerAndSleep.Start(); } }

1.3)Handler+Sleep结果

 2)Handler+PostDelayed方式

2.1)Handler+PostDelayed定义

public class HandlerAndPostDelayed {

    public HandlerAndPostDelayed(){

    }

    //定义Handler对象,用于处理接收Message
    Handler handler = new Handler(){

       @Override
        public boolean sendMessageAtTime(@NonNull Message msg,long uptimeMillis){

           Log.d("HandlerAndPostDelayed","HandlerAndPostDelayed,时间:"+  ToolHelper.GetNowDate());
           return super.sendMessageAtTime(msg,uptimeMillis);
       }
    };

    Runnable runnable = new Runnable() {
        @Override
        public void run() {

            handler.postDelayed(this,1000);
        }
    };

    //开启定时器
    public void Start(){
        handler.postDelayed(runnable,1000);
    }
    //关闭定时器
    public void Stop(){
        handler.removeCallbacks(runnable);
    }
}

2.2)Handler+PostDelayed调用

public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        //HandlerAndPostDelayed实现定时器调用
        HandlerAndPostDelayed handlerAndPostDelayed = new HandlerAndPostDelayed();
        handlerAndPostDelayed.Start();
}
}

2.3)Handler+PostDelayed结果

 3)Handler+Timer方式

 3.1)Handler+Timer定义

public class HandlerAndTimer {
    public HandlerAndTimer(){
} private final Timer timer = new Timer(); Handler handler = new Handler(){ @Override public void handleMessage(@NonNull Message msg){ Log.d("HandlerAndTimer","HandlerAndTimer,时间:"+ ToolHelper.GetNowDate()); super.handleMessage(msg); } }; TimerTask timerTask = new TimerTask() { @Override public void run() { Message message = new Message(); message.what = 1; handler.sendMessage(message); } }; public void Start(){ timer.schedule(timerTask,0,1000); } public void Stop(){ timer.cancel(); } }

 3.2)Handler+Timer调用

public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

       //HandlerAndTimer实现定时器调用
        HandlerAndTimer handlerAndTimer = new HandlerAndTimer();
        handlerAndTimer.Start();
   }
}

3.3)Handler+Timer结果

 附加下获取当前时间方法

public class ToolHelper {

    public static String GetNowDate(){
        //获取当前时间
        Date date = new Date(System.currentTimeMillis());
        //日期格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return dateFormat.format(date);
    }
}

参考来源:https://blog.csdn.net/Twan1234/article/details/125050488

标签:定时器,Message,void,学习,Handler,Override,new,Android,public
From: https://www.cnblogs.com/xielong/p/17749860.html

相关文章

  • 2023-2024-1 20231304 《计算机基础与程序设计》第二周学习总结
    2023-2024-120231304《计算机基础与程序设计》第二周学习总结作业信息这个作业属于哪个课程2023-2024计算机基础与程序设计这个作业要求在哪里《计算机基础与程序设计》第二周学习总结要求作业正文2023-2024-120231304《计算机基础与程序设计》第二周学习总结......
  • spring学习1
    1.使用Ioc容器管理bean,bean是Ioc容器中对象的统称(servlet,dao)控制反转(这难道是我之前Java项目中写了无数次的bean的由来吗)2.在Ioc容器内将有依赖关系给bean进行关系绑定依赖注入这两个操作可以使原本的程序充分解耦,达到使用对象时不仅可以......
  • 学习笔记420—【译】理解LSTM(通俗易懂版)
    【译】理解LSTM(通俗易懂版)循环神经网络(RecurrentNeuralNetworks)人对一个问题的思考不会完全从头开始。比如你在阅读本片文章的时,你会根据之前理解过的信息来理解下面看到的文字。在理解当前文字的时候,你并不会忘记之前看过的文字,从头思考当前文字的含义。传统的神经网络并......
  • 密码协议学习笔记(8.16):几种特殊的秘密分享体系
    已知两个秘密的碎片,计算秘密的乘积的碎片:已知两个秘密$\alpha_0,\beta_0$分别实现了门限值为$t$的分享记$$f_{\alpha}(x)=\alpha_0+\alpha_1x+\cdots+\alpha_{t-1}x^{t-1}$$$$f_{\beta}(x)=\beta_0+\beta_1x+\cdots+\beta_{t-1}x^{t-1}$$秘密碎片为$$A_1=f_{\alpha}(1),A_2=......
  • Dapr学习笔记(二)-安装Dapr环境(Docker)
    安装DaprCLI。它使你能够启动、运行并管理Dapr实例。它还提供调试支持。安装 DockerDesktop。如果在Windows上运行,请确保将用于Windows的DockerDesktop配置为使用Linux容器。 备注默认情况下,Dapr使用Docker容器来为你提供最佳的全新体验。若要在D......
  • android: 通过Intent筛选多种类型文件
     一般使用setType()方法来实现文件过滤,如:只显示PDF文件:intrequestCode=100;Intentintent=newIntent(Intent.ACTION_GET_CONTENT);intent.setType("application/pdf");intent.addCategory(Intent.CATEGORY_OPENABLE);startActivityFor......
  • 二分图匹配 - 学习心得
    就是跑匈牙利算法就行了,难点完全在于建图。模板水题Link#include<bits/stdc++.h>constintN=510;intn,m,e;intG[N][N],match[N];std::bitset<N>vis;namespaceBlackWhiteGraph{ inlinevoidInit(void){ scanf("%d%d",&n,&m); inta,t; for(regis......
  • C#学习笔记--变量类型的转换
    变量类型的转化:转换原则同类型的大的可以装小的,小类型的装大的就需要强制转换。隐式转换:同种类型的转换://有符号long——>int——>short——>sbytelongl=1;inti=1;shorts=1;sbytesb=1;//隐式转换int隐式转换成了long//可以用大范围装小范围的类型(隐......
  • Dapr学习笔记(一)-Dapr是什么?
    一、Dapr是什么?  DistributedApplicationRuntime(分布式应用运行时)是由Microsoft发起的开源项目,是一种用来降低微服务开发人员之间协作工作量的微服务组件。Dapr的核心有助于降低分散式微服务应用程序的固有复杂性。它以构建基块API的概念为基础构建。Dapr构建基......
  • # 2023-2024-1 20231311《计算机基础与程序设计》第2周学习总结
    作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/12998这个作业的目标自学教材,计算机科学概论第1章并完成云班课测试,《C语言程序设计》第1......