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

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

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

アプリでこれらのネストされた @UiThread メソッドを多数使用すると、問題が発生する可能性はありますか?

そのためにいくつかの競合状態を取得できますか?

パフォーマンスにのみ影響しますか?

4

1 に答える 1

2

@UIThreadHandler次のように、を使用してコードを実行するメソッドが生成されます。

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

ハンドラーの javadocをよく見ると、次の段落が表示されます。

Handler を使用すると、スレッドの MessageQueue に関連付けられた Message および Runnable オブジェクトを送信および処理できます。各 Handler インスタンスは、単一のスレッドとそのスレッドのメッセージ キューに関連付けられています。新しいハンドラを作成すると、それを作成しているスレッドのスレッド/メッセージ キューにバインドされます。その時点から、メッセージとランナブルをそのメッセージ キューに配信し、メッセージから出てきたときにそれらを実行します。列。

Handler はクラスのインスタンス化中に作成されるため、メイン スレッドにリンクされます。アノテーション付きメソッドへの各呼び出しは@UIThreadこの Handler のキューに入れられるため、各メソッドは次々に実行されます。

したがって、これらのメソッドで競合状態が発生することはありません。また、これらのメソッドはメイン スレッドで実行されるため、UI 処理のみを行う必要があります。

すべての質問にお答えしたいと思います。

于 2013-03-14T09:56:24.667 に答える