Android Annotations @UiThread比赛条件?

时间:2013-03-14 00:16:20

标签: android-annotations

@UiThread
void foo() {
   ...some animations...
};

@UiThread
void bar() {
   xyz();
};

@UiThread
void xyz() {
   foo();
};

如果我在我的应用中使用了许多嵌套的@UiThread方法,我会遇到麻烦吗?

我可以因此得到一些竞争条件吗?

它只会影响性能吗?

1 个答案:

答案 0 :(得分:2)

@UIThread将生成一个使用Handler执行代码的方法,如下所示:

private Handler handler_ = new Handler();
public void bar() {
    handler_.post(new Runnable() {
        ...
    }
}

如果我们仔细查看Handler's javadoc,我们可以看到这一段:

  

Handler允许您发送和处理与线程的MessageQueue关联的Message和Runnable对象。每个Handler实例都与一个线程和该线程的消息队列相关联。当您创建一个新的Handler时,它被绑定到正在创建它的线程的线程/消息队列 - 从那时起,它将消息和runnables传递给该消息队列并在消息出来时执行它们队列中。

在实例化类时创建Handler,因此它将链接到主线程。并且每次对@UIThread带注释的方法的调用都将排入此Handler,每个方法将一个接一个地执行。

所以你不应该在这些方法中有任何竞争条件。由于这些方法将在主线程上执行,因此您只能进行UI处理。

我希望我回答你的所有问题。