2

我基本上是在这条消息的底部做代码发布。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);
   }
};
4

1 回答 1

0

相同的Handler对象实例将通过选择传递给它的消息/可运行对象队列进行处理Looper(默认情况下为主线程)。

所以不,如果您向 Handler 发送消息列表,它们将一次运行 1 条,永远不会并行。

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

于 2012-11-18T20:28:53.787 回答