2012-11-18 46 views
2

我基本上是在这封邮件的底部做代码帖子。 foobar()将事件发布到公共状态机中。 我也有触发屏幕事件发布到公共状态机。 这是真的,通过使用处理程序我没有同步问题? (即,我的状态机不会因为触摸甚至是foobar事件而同时发出消息)?Android处理程序,定时器和多线程

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); 
    } 
}; 

回答

0

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

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

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