2012-01-25 15 views
3

私はAndroid-Appsを開発していますが、私は内部SDKの実装を見ていきたいと思います。それは巨大なフレームワークであり、場合によっては、内部メソッドがどのように実装されているか、わかっていれば、多くの場合役立ちます。AndroidでContextWrapperのメソッドを実装しているクラスはどれですか?

私が最後に行ったソースチェックは、私にとって本当に混乱しています。私はいくつかの実装を読むためにContextクラスを見ました。残念なことにそれらのほとんどは抽象的なので、AndroidはContextWrapper(単純なAdapter Pattern)を発明しています。

問題は、私が興味を持っているメソッドを見つけることができなかったことです。getResourcesを例として取ることができます。私はContextObjectを持っていて、getResourcesを呼び出します。このコンテキストはActivityのインスタンスです(これはgetResources()を単独で実装していません)。

Activityの直接の親クラスであるContextThemeWrapperと同じです。 ContextWrapperはContextメンバーのgetResources()を呼び出します。しかし、それを誰が実装していますか?

編集:ので質問もContextクラスのgetResources()メソッドが抽象的である

+0

あなたがメソッドを呼び出した後、自分のコードをデバッグしようとしたことがありますか? –

+0

ライブラリにアンドロイドソースを添付すれば、読みやすくデバッグする方がはるかに簡単です。 –

答えて

3

最後に、nicholas.hausschildの役に立つヒントを使って、デバッガを実行するだけで自分自身が見つけました。

残念ながら、これは唯一の方法であると思われます。これは、パッケージ可読であるContextImplというクラスで実装されているためです(文書化されていませんが)。 Eclipse source-code plugin(これはEclipseをダウンロードしてEclipseにリンクしていれば、インストールには少しバギーが多いようです)をインストールして、ソースを確認する必要があります。これらのソースに興味がある人のため

clickme

2

「必要なメソッドを実装しているContextWrapperに渡されたコンテキスト」することができ

public class ContextWrapper{ 
    Context mContext 

    public ContextWrapper(Context ctx){ 
     mContext = ctx 
    } 

    public Resourced getResources(){ 
     return mContext.getResources() 
    } 

    //... all other Methods are implementing the same AdapterPattern 
} 

ContextWrapper

からスニペットを追加しましたつまり、それを継承するものは、その実装を提供または上書きする必要があります。 ContextWrapperクラスの getResources()の実装は具体的なもので、コードを見つけるべき場所です。

また、継承チェーンが少し後ろにあります。 ActivityContextThemeWrapperのサブクラスではなく、他の方法で回避され:

java.lang.Object 
    ↳ android.content.Context    // abstract Resources getResources() 
    ↳ android.content.ContextWrapper  // Resources getResources() 
     ↳ android.view.ContextThemeWrapper // inherits ContextWrapper.getResources() 
     ↳ android.app.Activity   // inherits ContextWrapper.getResources() 

Android Developer Referenceは継承構造をお届けします。

+0

あなたはContextThemeWrapperについて教えてください。しかしこれは私の意図です。私は既にタイプミスを修正しました。しかし、問題はあなたの答えによって解決されません:私は、 'getResources'のContextWrapperの実装が具体的であることを知っていると言いました。見るために私の編集を見てください、そこにはどのように実装されていますか –

関連する問題