zoukankan      html  css  js  c++  java
  • AndroidTimer使用(一)

     Timers主要是用来在后台运行一些任务。可以把Timer设置为守护线程。当调用cancel时所有已经安排的任务都没会被取消。

     Timer中的任务是依次执行的,如果一个任务花很长时间才执行完,那么它就可能影响下一个任务的开始执行的时间。
     TimerTask对任务的实时调度并没有保证,因为作为底层的实现依赖于Object.wait(long)方法。

     多个线程可以共享不为自己同步的一个定时器。
     Timer有两种调度模式fixed-rate(固定的调度周期),fixed-period(完整的执行周期)。默认的是fixed-period。

     fixed-period:

    public void schedule (TimerTask task, long delay, long period)
    Schedule a task for repeated fixed-delay execution after a specific delay.
    schedule (TimerTask task, Date when, long period)

    在delay时间后开始执行第一次,从此以后每隔period又开始执行。如果时间到了,但是当前还有其他的任务在执行,它只有等当前任务执行完了,才能被调度并执行。

     

    fixed-rate:

    public void scheduleAtFixedRate (TimerTask task, long delay, long period)
    scheduleAtFixedRate (TimerTask task, Date when, long period)

    在delay时间后开始执行第一次,从此以后每隔period又开始执行,即使当前还有其他的任务在执行,它也会被调度并执行。

    注意:守护线程就是一直运行,即使任务完成也不会停止的线程。
    Timer编写方式深解

    许多编程人员都会认为,Android Timer的实现方法比较简单,其实真正的草率做起来并非如此。我们在这里就为大家介绍一下这方面的相关知识。

    Android手机操作系统是一款基于Linux平台的开源手机操作系统。对于编程人员来说,修改这一操作系统的方法应该很容易就可以掌握。不过中间还是有许多细节需要我们注意。比如写惯java的人可能会认为Android Timer的使用应该如下:

    程序功能很简单:10秒后,SetTitle为“hear me?”,然后,实际上这样做是不行的,这跟Android的线程安全

    package eoe.test; 
    
    
    import java.util.Timer; 
    import java.util.TimerTask; 
    import android.app.Activity; 
    import android.os.Bundle; 
    
    
    public class JavaTimer extends Activity { 
    Timer timer = new Timer(); 
    TimerTask task = new TimerTask(){ 
    public void run() { 
    setTitle("hear me?"); 
    } 
    }; 
    
    
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    timer.schedule(task, 10000); 
    } 
    }

    但实际上的用法应该通过配合Handler来实现Android Timer功能的!

    package eoe.test; 
    
    import java.util.Timer; 
    import java.util.TimerTask; 
    import android.app.Activity; 
    import android.os.Bundle; 
    import android.os.Handler; 
    import android.os.Message; 
    
    
    public class TestTimer extends Activity { 
    Timer timer = new Timer(); 
    Handler handler = new Handler(){ 
    public void handleMessage(Message msg) { 
    switch (msg.what) { 
    case 1: 
    setTitle("hear me?"); 
    break; 
    } 
    super.handleMessage(msg); 
    } 
    }; 
    TimerTask task = new TimerTask(){ 
    public void run() { 
    Message message = new Message(); 
    message.what = 1; 
    handler.sendMessage(message); 
    } 
    }; 
    
    
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    timer.schedule(task, 10000); 
    } 
    } 
  • 相关阅读:
    web.xml+spring mvc基本配置
    REST服务安全-双向认证
    thymeleaf 配置
    jenkins
    linux下ssh/scp无密钥登陆方法
    java编译 Error: Could not find or load main class java执行包main方法
    文本按列导入excel
    linux脚本-判断进程是否存在,从而可以做预警处理..
    Linux中顿号
    >/dev/null 2>&1
  • 原文地址:https://www.cnblogs.com/xuewater/p/2594649.html
Copyright © 2011-2022 走看看