Android处理程序,计时器和多线程

时间:2012-11-18 17:27:27

标签: android multithreading timer handler state-machine

我基本上是在这条消息的底部做代码发布。 foob​​ar()将事件发布到公共状态机中。 我还将触摸屏事件发布到公共状态机中。 是的,通过使用处理程序,我没有同步问题? (即,我的状态机不会同时通过触摸和foobar事件发送消息)?

private Handler handler = new Handler();
handler.postDelayed(runnable, 100);


private Runnable runnable = new Runnable() {
   @Override
   public void run() {
      /* do what you need to do */
      foobar();
      /* and here comes the "trick" */
      handler.postDelayed(this, 100);
   }
};

1 个答案:

答案 0 :(得分:0)

Handler对象的同一个实例将处理通过Looper选择的消息/ runnables队列(默认情况下为主线程)。

所以不,如果你向处理程序发送一个消息列表,它们将一次运行1,而不是并行。

但是如果你担心同步问题,那么你应该在你的方法中围绕一个公共对象synchronize(object) {}代码,这样他们就会等待锁定那个公共对象,这意味着你可以从任何地方调用该方法永远不会与使用synchronize(object) {}的任何其他代码并行运行。