• 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); 
    } 
    } 
  • 相关阅读:
    波段是金牢记六大诀窍
    zk kafka mariadb scala flink integration
    Oracle 体系结构详解
    图解 Database Buffer Cache 内部原理(二)
    SQL Server 字符集介绍及修改方法演示
    SQL Server 2012 备份与还原详解
    SQL Server 2012 查询数据库中所有表的名称和行数
    SQL Server 2012 查询数据库中表格主键信息
    SQL Server 2012 查询数据库中所有表的索引信息
    图解 Database Buffer Cache 内部原理(一)
  • 原文地址:https://www.cnblogs.com/xuewater/p/2594649.html
Copyright © 2020-2023  润新知