子线程操作UI

Handler

实现了一个Clock类来学习

  1. /**
  2. * 实现一个时钟类 实时更新TextView中的时间信息
  3. * 创建时必须传入需要更新的TextView
  4. * 在UI线程中注册clockHandler实现回调更新
  5. */
  6. public class Clock {
  7. public Handler clockHandler;
  8. public TextView textClock;
  9. private boolean isClockStared = false;
  10. private ClockThread clockThread = null;
  11. // 构造
  12. public Clock(TextView aTextClock) {
  13. textClock = aTextClock;
  14. clockHandler = new ClockHandler();
  15. }
  16. // 时钟UI更新方法
  17. public void clockUpdate() {
  18. textClock.setText(new Date().toString());
  19. }
  20. // 启动clock线程
  21. public void clockStart() {
  22. if (clockThread == null) {
  23. clockThread = new ClockThread();
  24. }
  25. if (!isClockStared) {
  26. clockThread.start();
  27. isClockStared = true;
  28. }
  29. }
  30. // 关闭clock线程
  31. public void clockStop() {
  32. clockThread.interrupt();
  33. clockThread = null; /*内存*/
  34. isClockStared = false;
  35. }
  36. class ClockThread extends Thread {
  37. public void run() {
  38. while (!isInterrupted()) {
  39. try {
  40. clockHandler.sendEmptyMessage(666);
  41. Thread.sleep(1000);
  42. } catch (InterruptedException e) {
  43. e.printStackTrace();
  44. Thread.currentThread().interrupt();
  45. }
  46. }
  47. }
  48. }
  49. class ClockHandler extends Handler {
  50. public void handleMessage(Message msg) {
  51. if (msg.what == 666) {
  52. clockUpdate();
  53. }
  54. }
  55. }
  56. }

主要需要注意 ClockHandler类

实际使用时,在UI线程中,创建一个 Handler的引用,并绑定到Clock实例的clockHandler即可

广播

异步任务