现在的位置: 首页 > 综合 > 正文

Handler 之 预约时间功能

2013年01月29日 ⁄ 综合 ⁄ 共 1696字 ⁄ 字号 评论关闭

 Handler  是Android系统中处理定时操作的核心类。Handler 类主要通过以下三个方法来执行线程运行接口Runnable的时间:

(1)   立即执行Runnable 对象    public final  boolean  post(Runnable  r);

(2)  在指定的时间 (uptimeMillis) 执行Runnable 对象   public  final boolean  postAtTime(Runnable  r, long  uptimeMillis), 第2个参数表示一个精确时间的毫秒数,如果从当前时间算起,需要使用android.os.SystemClock.uptimeMillis()获得基准时间;

(3)  在指定的时间间隔(delayMillis) 执行Runnable 对象  public  final  boolean  postDelayed(Runnable  r, long delayMillis);

主要代码:

public class Main extends Activity implements OnClickListener, Runnable  {
 private Handler handler;
 private TextView tvCount;
 private int count = 0;

 @Override
 public void onCreate(Bundle savedInstanceState)  {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  Button btnStart = (Button) findViewById(R.id.btnStart);
  Button btnStop = (Button) findViewById(R.id.btnStop);
  Button btnShowToast = (Button) findViewById(R.id.btnShowToast);
  tvCount = (TextView) findViewById(R.id.tvCount);
  btnStart.setOnClickListener(this);
  btnStop.setOnClickListener(this);
  btnShowToast.setOnClickListener(this);
  
  handler = new Handler();
 }
 
 class RunToast implements Runnable  {
  private Context context;
  public RunToast(Context context)   {  this.context = context;  }

  @Override
  public void run() {
   Toast.makeText(context, "3秒后显示Toast提示信息", Toast.LENGTH_LONG).show();
   }
 }

 @Override
 public void onClick(View view)  {
  switch (view.getId())  {
   case R.id.btnStart:
    handler.postDelayed(this, 1000);
    break;
   case R.id.btnStop:
    handler.removeCallbacks(this);
    break;
   case R.id.btnShowToast:
    handler.postAtTime(new RunToast(this)   { }, SystemClock.uptimeMillis() + 3000);
    break;
  }
 }

 @Override
 public void run()   {
  tvCount.setText("Count:" + String.valueOf(++count));
  handler.postDelayed(this, 1000);
 }
}

示意图

具体代码请参见
ch08_handler 
工程

抱歉!评论已关闭.