1. 程式人生 > >android中的定時器

android中的定時器

Thread的sleep(long)方法

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        new Thread(runnable).start();
    }

    private int looper = 0;
    Runnable runnable = new Runnable() {
        @Override
public void run() { while (true){ try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } Log.d("ThreadAct", ++looper + ""); } } }; @Override
protected void onDestroy() { super.onDestroy(); runnable = null; }

Handler的postDelayed(Runnable, long)方法

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        Log.d("HandlerAct"
,"Thread.name:"+Thread.currentThread().getName()); runHandler.postDelayed(runnable,2000); } private Handler runHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); } }; private int looper = 0; Runnable runnable = new Runnable(){ @Override public void run() { //TODO something Log.d("HandlerAct",++looper+""); Log.d("HandlerAct","Thread.name:"+Thread.currentThread().getName()); runHandler.postDelayed(this,2000); } }; @Override protected void onDestroy() { super.onDestroy(); runHandler.removeCallbacks(runnable);//停止 }

Timer與TimerTask結合的方法

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        timer.schedule(task,1000,2000);
    }

    private int looper = 0; 

    Timer timer = new Timer( ); 

    TimerTask task = new TimerTask( ) {
        public void run ( ) {
            timerHandler.sendEmptyMessage(0);
        }
    };

    Handler timerHandler = new Handler( ) {
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Log.d("TimerAct",++looper+"");
        }
    };

    protected void onDestroy ( ) {
        if (timer != null) {
            timer.cancel( );
            timer = null;
        }
        super.onDestroy( );
    }

使用schedule方法,1秒後呼叫此task物件,然後每2秒執行一次

timer.schedule(task,1000,2000);

ScheduledThreadPoolExecutor

利用ScheduledThreadPoolExecutor定時執行任務:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        threadPool.scheduleAtFixedRate(task,0,2, TimeUnit.SECONDS);
    }

    private ScheduledThreadPoolExecutor threadPool = new ScheduledThreadPoolExecutor(5);

    private int looper = 0;

    TimerTask task = new TimerTask( ) {
        public void run ( ) {
            timerHandler.sendEmptyMessage(0);
        }
    };

    final Handler timerHandler = new Handler( ) {
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Log.d("ExecutorAct",++looper+"");
        }
    };

CountDownTimer倒計時

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        timer.start();
    }
    private int looper = 0;
    private CountDownTimer timer = new CountDownTimer(10000, 1000) {

        @Override
        public void onTick(long millisUntilFinished) {
            Log.d("CountdownTimerAct",++looper+"");
        }

        @Override
        public void onFinish() {
            Log.d("CountdownTimerAct","onFinish");
            Log.d("CountdownTimerAct",++looper+"");
        }
    };