Androidでタイマーを実現する3つの方法

3059 ワード

  • Handler+Thread

  • Handler独自のpostDelyedメソッド
  • Handler + Timer + TimerTask


  • 1. Handler+Thread
    public class HanderDemoActivity extends Activity {
    
      TextView tvShow;
      private int i = 0;
       
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvShow = (TextView) findViewById(R.id.tv_show);
        new Thread(new ThreadShow()).start();
      }
       
      // handler       UI
      Handler handler = new Handler() {
        public void handleMessage(Message msg) {
          if (msg.what == 1) {
            tvShow.setText(Integer.toString(i++));
            System.out.println("receive....");
          }
        };
      };
       
      //            
      class ThreadShow implements Runnable {
        @Override
        public void run() {
          while (true) {
            try {
              Thread.sleep(1000);
              Message msg = new Message();
              msg.what = 1;
              handler.sendMessage(msg);
              System.out.println("send...");
            } catch (Exception e) { 
                e.printStackTrace();
                System.out.println("thread error...");
            }
          }
        }
      }
    }
    

    2.Handlerが持参したpostDelyedメソッド
    public class HanderDemoActivity extends Activity {
      TextView tvShow;
      private int i = 0;
      private int TIME = 1000; //   1s  
       
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvShow = (TextView) findViewById(R.id.tv_show);
        handler.postDelayed(runnable, TIME); //        UI
      }
    
      Handler handler = new Handler();
      Runnable runnable = new Runnable() {
        @Override
        public void run() {
          // handler         
          try {
            handler.postDelayed(this, TIME);
            tvShow.setText(Integer.toString(i++));
            System.out.println("do...");
          } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("exception...");
          }
        }
      };
    }
    

    3. Handler + Timer + TimerTask
    public class HanderDemoActivity extends Activity {
    
      TextView tvShow;
      private int i = 0;
      private int TIME = 1000;
       
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvShow = (TextView) findViewById(R.id.tv_show);
        timer.schedule(task, 1000, 1000); // 1s   task,  1s    
      }
    
      Handler handler = new Handler() {
        public void handleMessage(Message msg) {
          if (msg.what == 1) {
            tvShow.setText(Integer.toString(i++));
          }
          super.handleMessage(msg);
        };
      };
    
      Timer timer = new Timer();
      TimerTask task = new TimerTask() {
        @Override
        public void run() {
          //         
          Message message = new Message();
          message.what = 1;
          handler.sendMessage(message);
        }
      };
    }