android 定时器的实现比较

android 定时器的实现比较第一种,Handler+threadpublicclassMainActivityextendsActivity{TextViewtextView;inttime;Handlerhandler=newHandler(){@OverridepublicvoidhandleMessage(Messag

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

第一种,Handler+ thread

public class MainActivity extends Activity {

    TextView textView;
    int time;
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            textView.setText(msg.arg1 + "");
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.test_time);
        textView.setText(time + "");
        new Thread() {
            @Override
            public void run() {
                int times = 0;
                while (true) {
                    try {
                        Thread.sleep(1000);
                        Message message = new Message();
                        message.arg1 = times;
                        times++;
                        handler.sendMessage(message);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
    }

这种明显的是使用了另外一个线程,在android开发中,速度是很重要的,开启线程都是需要进行消耗大量资源的,android不必web,他的资源有限,所以我们在不必要的时候,不要开启线程,结果是:

android 定时器的实现比较

结果很简单

第二种:Handler + postDelyed  

TextView textView;
    int time = 1000;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.test_time);

        System.out.println("Main  Name : "
                + Thread.currentThread().getName());
        handler.postDelayed(runnable, time);
    }

    Handler handler = new Handler();

    Runnable runnable = new Runnable() {
        int i = 0;

        @Override
        public void run() {
            System.out.println("Name : "
                    + Thread.currentThread().getName());
            textView.setText(i + "");
            handler.postDelayed(this, time);
            i++;
        }
    };

结果打印如下:

android 定时器的实现比较
可以看出,这种的定时效果是在主线程中的并且实在MessageQuence中进行实现的:

 needWake = mBlocked && p.target == null && msg.isAsynchronous();
                Message prev;
                for (;;) {
                    prev = p;
                    p = p.next;
                    if (p == null || when < p.when) {
                        break;
                    }
                    if (needWake && p.isAsynchronous()) {
                        needWake = false;
                    }
                }
                msg.next = p; // invariant: p == prev.next
                prev.next = msg;
            }

这是android的源码,他确实没有启动线程

第三种:Handler+Timer+TimerTask

TextView textView;
    int time = 10000;
    int i;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.test_time);

        System.out.println("Main  Name : "
                + Thread.currentThread().getName());
//        handler.postDelayed(runnable, time);

        timer.schedule(timerTask,0,10000);

    }


    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            textView.setText(i++ + "");
        }
    };

    Timer timer = new Timer();
    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            System.out.println("Name : "
                    + Thread.currentThread().getName());
            Message message = new Message();
            handler.sendMessage(message);
        }
    };

打印图:

android 定时器的实现比较

可以看出,这个也是自己启动了一个线程,实在线程中进行定时的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160058.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • leetcode第一刷_Restore IP Addresses

    leetcode第一刷_Restore IP Addresses

    2022年2月6日
    39
  • java swing视频教程下载_JAVA Swing 教程

    java swing视频教程下载_JAVA Swing 教程JAVASwing教程,包含所有练习源码和讲解教程!初级界面篇练习01分解颜色练习02画板练习03帧练习04画布练习05密码验证界面练习06对话框练习07滚动条练习08边框练习09单选框图片浏览器练习10卡片布局管理器练习11边界布局管理器练习12进程条练习13列表框和组合框练习14选项卡练习15菜单练习16菜单快捷键练习17模式对话框练习18网格布局管理器练习19复选框练习20单选框练习21…

    2022年9月5日
    3
  • linux进程管理工具_进程管理系统的目标

    linux进程管理工具_进程管理系统的目标引言:    在Linux的内核的五大组成模块中,进程管理模块时非常重要的一部分,它虽然不像内存管理、虚拟文件系统等模块那样复杂,也不像进程间通信模块那样条理化,但作为五大内核模块之一,进程管理对我们理解内核的运作、对于我们以后的编程非常重要。同时,作为五大组成模块中的核心模块,它与其他四个模块都有联系。下面就对进程模块进行想写的介绍,首先要了解进程及其相关的概念。其次介

    2022年9月11日
    0
  • 搜索引擎自动提交连接php文件,死链检测工具(自动提交给百度,逆天了)

    搜索引擎自动提交连接php文件,死链检测工具(自动提交给百度,逆天了)每个网站都避免不了404死链的存在。造成死链的原因有很多,比如说文章页被删除、链接被修改、网页链接更换存储路径等,这些都会成为死链。这些死链的产生,降低了搜索引擎对网站的友好度、影响用户体验,甚至会导致网站排名下降等。刚操作MAY博客的时候,文章的内容不是很多,遇到死链,只是简单的手动一个个去站长平台提交。但随着文章及页面的不断增加,一个个手动去操作,是不是麻烦了些。咦,是否能借助死链检测工具,自…

    2022年7月23日
    11
  • tryhackme圣诞挑战2021-Advent of Cyber 3-day1-IDOR漏洞,不安全的访问控制漏洞

    tryhackme圣诞挑战2021-Advent of Cyber 3-day1-IDOR漏洞,不安全的访问控制漏洞文章目录第一天IDOR漏洞是什么?通常出现的地方查询get请求post的表单的值cookies挑战初探挑战的问题第一天货物系统出现了问题,让我们想办法进行修复!IDOR漏洞是什么?InsecureDirectObjectReference,不安全的直接对象引用,是一种权限控制类漏洞,类似于越权漏洞吧,就是用户访问到了自己不应该访问的信息,比如我只能查看我自己的资料,但我可以通过修改一些参数访问其他人的资料。通常出现的地方查询get请求post的表单的值这里用户的id被隐藏了,如果修

    2022年6月11日
    34
  • 关于pycharm安装第三方库的一些方法_pycharm安装本地第三方库

    关于pycharm安装第三方库的一些方法_pycharm安装本地第三方库问题集合记得关梯子记得关梯子记得关梯子要是遇到pip命令报错,或者在pycharm中无法下载第三方库,首先检查一下梯子是否开了的。我的环境:pycharm+anaconda虚拟环境问题1:问题:WARNING:Youareusingpipversion21.2.4;however,version21.3.1isavailable.Youshouldconsiderupgradingviathe’D:\anaconda\envs\py36\python.e

    2022年8月28日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号