@UiThread
void foo() {
...some animations...
};
@UiThread
void bar() {
xyz();
};
@UiThread
void xyz() {
foo();
};
アプリでこれらのネストされた @UiThread メソッドを多数使用すると、問題が発生する可能性はありますか?
そのためにいくつかの競合状態を取得できますか?
パフォーマンスにのみ影響しますか?
@UiThread
void foo() {
...some animations...
};
@UiThread
void bar() {
xyz();
};
@UiThread
void xyz() {
foo();
};
アプリでこれらのネストされた @UiThread メソッドを多数使用すると、問題が発生する可能性はありますか?
そのためにいくつかの競合状態を取得できますか?
パフォーマンスにのみ影響しますか?
@UIThread
Handler
次のように、を使用してコードを実行するメソッドが生成されます。
private Handler handler_ = new Handler();
public void bar() {
handler_.post(new Runnable() {
...
}
}
ハンドラーの javadocをよく見ると、次の段落が表示されます。
Handler を使用すると、スレッドの MessageQueue に関連付けられた Message および Runnable オブジェクトを送信および処理できます。各 Handler インスタンスは、単一のスレッドとそのスレッドのメッセージ キューに関連付けられています。新しいハンドラを作成すると、それを作成しているスレッドのスレッド/メッセージ キューにバインドされます。その時点から、メッセージとランナブルをそのメッセージ キューに配信し、メッセージから出てきたときにそれらを実行します。列。
Handler はクラスのインスタンス化中に作成されるため、メイン スレッドにリンクされます。アノテーション付きメソッドへの各呼び出しは@UIThread
この Handler のキューに入れられるため、各メソッドは次々に実行されます。
したがって、これらのメソッドで競合状態が発生することはありません。また、これらのメソッドはメイン スレッドで実行されるため、UI 処理のみを行う必要があります。
すべての質問にお答えしたいと思います。