android定时,延时,倒计时源码

 三种常用的定时器 

Handler mHandler = new Handler();
Runnable r = new Runnable() {

                    @Override
                    public void run() {
                            //do something
         
                       			
                            //每隔1s循环执行run方法
                            mHandler.postDelayed(this, 1000);
                            
                    }
};

主线程中调用:
mHandler.postDelayed(r, 1000);//延时1000毫秒后启动
mHandler.removeCallbacks(r);  //停止计时
Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 1){
                //do something
            }
            super.handleMessage(msg);
        }
    };

    Timer timer = new Timer();
    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            Message message = new Message();
            message.what = 1;
            handler.sendMessage(message);
        }
    };
 主线程中调用:timer.schedule(timerTask,1000,500);//延时1s,每隔500毫秒执行一次run方法
Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 1){
                //do something
            }
            super.handleMessage(msg);

        }
    };

    class MyThread extends Thread {//这里也可用Runnable接口实现
        @Override
        public void run() {
            while (true){
                try {
                    Thread.sleep(1000);//每隔1s执行一次
                    Message msg = new Message();
                    msg.what = 1;
                    handler.sendMessage(msg);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        }
    }
主线程中调用:new Thread(new MyThread()).start();

三种延时执行的快捷方法: 

new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
              //do something
          }
       }, 1000);    //延时1s执行



timer = new Timer();
                 timer.schedule(new TimerTask() {                   
                    @Override
                    public void run() {
                          //do something
                    }
                },1000);//延时1s执行



new Thread(new MyThread()).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);//延时1s
                    //do something
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();

范例:android源码一个猜数字游戏 猜大猜小带计时.rar

package com.example.guessgame;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.*;


public class MainActivity extends ActionBarActivity {
	private final int TIME_ALL=20;
	private int Time=TIME_ALL;
	private TextView info;
	private EditText input;
	private Button button;
	private int target;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        info = (TextView)findViewById(R.id.info);
        input = (EditText)findViewById(R.id.input);
        button = (Button)findViewById(R.id.button);
        
        button.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View view) {
				// TODO Auto-generated method stub
				if(button.getText().toString().equals("OK")){
					mHandler.removeCallbacks(r);  //停止计时
					if(input.getText().toString().equals(""))
						return;
					int tmp = Integer.parseInt(input.getText().toString());
					if(tmp == target){
						info.setText("恭喜你,猜对了");
						button.setText("再来一次!");
					}
					else if(tmp < target)
						info.setText("猜小了,请重试");
					else 
						info.setText("猜大了,请重试");		
				}
				else
					newGame();
			}
		});
        newGame();
    }
    
Handler mHandler = new Handler();
                 Runnable r = new Runnable() {

                    @Override
                    public void run() {
                            //do something
                            Time--;	
                            if(Time==0)
                            {
                            		info.setText("(计时"+TIME_ALL+"秒,当前:"+Time+"),你已经超时了。");
                            }
                            else if(Time>0)
                            {
                            		info.setText("(计时"+TIME_ALL+"秒,当前:"+Time+")请输入1-100之间的数字:");
                            }
                       			
                            //每隔1s循环执行run方法
                            mHandler.postDelayed(this, 1000);
                            
                    }
                };
                
    private void newGame(){
    	
    	Time=TIME_ALL;
    	mHandler.postDelayed(r, 1000);//延时1000毫秒后启动
    	info.setText("(计时"+TIME_ALL+"秒,当前:"+Time+")请输入1-100之间的数字:");
    	input.setText("");
    	button.setText("OK");
    	target = (int)((Math.random())*99 + 1);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
发布了331 篇原创文章 · 获赞 140 · 访问量 71万+

猜你喜欢

转载自blog.csdn.net/chenhao0568/article/details/90902534
今日推荐