@UiThread
void foo() {
...some animations...
};
@UiThread
void bar() {
xyz();
};
@UiThread
void xyz() {
foo();
};
如果我在我的应用中使用了许多嵌套的@UiThread方法,我会遇到麻烦吗?
我可以因此得到一些竞争条件吗?
它只会影响性能吗?
答案 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处理。
我希望我回答你的所有问题。