Android三种实现定时器的方法

来源:互联网 发布:win10抗锯齿软件 编辑:程序博客网 时间:2024/05/18 09:21

方法一:Handler+Thread

[java] view plaincopyprint?
  1. package com.xunfang.handerDemo;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.widget.TextView;
  7. /**
  8. * handler定时器
  9. *
  10. * @author Smalt
  11. *
  12. */
  13. public class HanderDemoActivityextends Activity {
  14. TextView tvShow;
  15. private int i =0;
  16. @Override
  17. public void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.main);
  20. tvShow = (TextView) findViewById(R.id.tv_show);
  21. new Thread(new ThreadShow()).start();
  22. }
  23. // handler类接收数据
  24. Handler handler = new Handler() {
  25. public void handleMessage(Message msg) {
  26. if (msg.what == 1) {
  27. tvShow.setText(Integer.toString(i++));
  28. System.out.println("receive....");
  29. }
  30. };
  31. };
  32. // 线程类
  33. class ThreadShow implements Runnable {
  34. @Override
  35. public void run() {
  36. // TODO Auto-generated method stub
  37. while (true) {
  38. try {
  39. Thread.sleep(1000);
  40. Message msg = new Message();
  41. msg.what = 1;
  42. handler.sendMessage(msg);
  43. System.out.println("send...");
  44. } catch (Exception e) {
  45. // TODO Auto-generated catch block
  46. e.printStackTrace();
  47. System.out.println("thread error...");
  48. }
  49. }
  50. }
  51. }
  52. }

方法二:Handler类自带的postDelyed

[java] view plaincopyprint?
  1. package com.xunfang.handerDemo;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.widget.TextView;
  6. /**
  7. * handler定时器使用postDelyed实现
  8. *
  9. * @author Smalt
  10. *
  11. */
  12. public class HanderDemoActivityextends Activity {
  13. TextView tvShow;
  14. private int i =0;
  15. private int TIME =1000;
  16. @Override
  17. public void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.main);
  20. tvShow = (TextView) findViewById(R.id.tv_show);
  21. handler.postDelayed(runnable, TIME); //每隔1s执行
  22. }
  23. Handler handler = new Handler();
  24. Runnable runnable = new Runnable() {
  25. @Override
  26. public void run() {
  27. // handler自带方法实现定时器
  28. try {
  29. handler.postDelayed(this, TIME);
  30. tvShow.setText(Integer.toString(i++));
  31. System.out.println("do...");
  32. } catch (Exception e) {
  33. // TODO Auto-generated catch block
  34. e.printStackTrace();
  35. System.out.println("exception...");
  36. }
  37. }
  38. };
  39. }

方法三:

Handler+Timer+TimerTask

[java] view plaincopyprint?
  1. package com.xunfang.handerDemo;
  2. import java.util.Timer;
  3. import java.util.TimerTask;
  4. import android.app.Activity;
  5. import android.os.Bundle;
  6. import android.os.Handler;
  7. import android.os.Message;
  8. import android.widget.TextView;
  9. /**
  10. * 定时器实现:Handler+Timer+TimerTask
  11. *
  12. * @author Smalt
  13. *
  14. */
  15. public class HanderDemoActivityextends Activity {
  16. TextView tvShow;
  17. private int i =0;
  18. private int TIME =1000;
  19. @Override
  20. public void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.main);
  23. tvShow = (TextView) findViewById(R.id.tv_show);
  24. timer.schedule(task, 1000, 1000); // 1s后执行task,经过1s再次执行
  25. }
  26. Handler handler = new Handler() {
  27. public void handleMessage(Message msg) {
  28. if (msg.what == 1) {
  29. tvShow.setText(Integer.toString(i++));
  30. }
  31. super.handleMessage(msg);
  32. };
  33. };
  34. Timer timer = new Timer();
  35. TimerTask task = new TimerTask() {
  36. @Override
  37. public void run() {
  38. // 需要做的事:发送消息
  39. Message message = new Message();
  40. message.what = 1;
  41. handler.sendMessage(message);
  42. }
  43. };
  44. }

原创粉丝点击