、私はいくつかの方法怒鳴る見ないでください はActivity.javaのソースコードは、内部ゲッター/セッター
public Window getWindow() {
return mWindow;
}
しかし、次のルールなど
:内部ゲッター/セッターを避け
C++などの母国語では、 ゲッターを使用する一般的な方法(例:直接フィールドにアクセスするのではなく(i = mCount)、代わりにフィールドに直接アクセスするのではなく(i = getCount())コンパイラが通常 のアクセスをインラインでインライン化し、 のデバッグフィールドへのアクセスを制限する必要がある場合は、 のコードをいつでも追加することができるので、 はC++の優れた習慣です。
Androidでは、これは悪い考えです。 仮想メソッド呼び出しは、 インスタンスフィールド ルックアップよりもはるかに高価です。 共通オブジェクト指向プログラミング を実践し、ゲッターとセッターをパブリックインターフェイスで にするのは合理的ですが、 クラス内では常にフィールド に直接アクセスする必要があります。
JITがない場合、 は、 トリガーゲッターを呼び出すよりも約3倍高速です。 JIT( 直接フィールドへのアクセスは、 ローカルにアクセスする場合と同じくらい安い)では、ダイレクトフィールド へのアクセスは、簡単なゲッターを呼び出す よりも約7倍高速です。これはFroyoでは に該当しますが、今後 ではJITインラインゲッター メソッドが改善されます。
このアンドロイドの開発者がこのmWindowオブジェクトに直接アクセスしない理由を知りたいのですが?現在のアンドロイドバージョンのJITがアクセスをインライン化できない場合、getWindow()。findViewById(id)はmWindow.findViewById(id)よりも時間がかかり、findViewByIdはかなり頻繁に使用されるメソッドです。
感謝。あなたが言ったように私は確かに各ビューのfindViewByIdを呼び出します。たぶん私は原則を誤解しているかもしれませんが、今は明らかです。 – teok