在开发Android-Apps时,我喜欢看一下内部SDK实现。这是一个庞大的框架,如果您知道内部方法是如何实现的,有时它会有很大帮助。
现在我做的最后一次检查对我来说真的很困惑。我查看了Context
类来阅读一些实现。不幸的是,大多数都是抽象的,这就是Android发明ContextWrapper(一个简单的适配器模式)的原因。
问题是,我找不到一些我感兴趣的方法。让我们以getResources
为例。我有一个ContextObject并在其上调用getResources。此上下文是Activity
的实例(它本身不实现getResources()
)。
相同的ContextThemeWrapper是Activity的直接父类。然后ContextWrapper在其getResources()
成员上调用Context
。但是谁在实施呢?
编辑:从ContextWrapper添加了Snippet
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
}
所以问题也可以是“将哪个Context传递给ContextWrapper,它正在实现所需的方法”
答案 0 :(得分:3)
我终于通过nicholas.hausschild的有用提示找到了它,只是为了运行调试器。
不幸的是,这似乎是找到它的唯一方法,因为它是在名为ContextImpl
的类中实现的,它是可读包的(尽管没有记录)。您必须安装Eclipse source-code plugin(如果您已经下载并将Android-SDK链接到eclipse,那么安装它似乎是一个小小的错误)来查看源代码。
对于对这些来源感兴趣的任何人:clickme
答案 1 :(得分:2)
getResources()
类上的Context
方法是抽象的,这意味着从它需要提供或覆盖其实现的任何继承。 getResources()
类上ContextWrapper
的实现是具体的,您应该找到它的代码。
此外,你的继承链有点倒退。 Activity
是ContextThemeWrapper
的子类,而不是相反:
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将帮助您继承结构。