我们知道Android 软件每一个界面 都是Activity构成的 那么Activity 是怎么创建一个界面的呢 ?
接下来是看源码时间 过程复杂 耐心观看
setContentView(R.layout.activity_main);
这个大家再熟不过了 onCreate中调用这个就可以创建对应布局文件的界面
接下来看API源码 :
activity中:
public void setContentView(int layoutResID) {
getWindow().setContentView(layoutResID);
initWindowDecorActionBar();
}
getWindow()得到的是一个Window对象
public Window getWindow() {
return mWindow;
}
Window是一个抽象类 不可能创建对象
那么我们找一下它的实现类 (Activity六千行代码 这是真难找啊 )。
在attach方法中:
// attach 方法是Activity通过反射实例化之后调用的第一个方法 ,之后生命周期的方法才会被调用
可以看到调用了PolicyManager的静态方法
看一下这个PolicyManager
咦 SDK看不了 代码中也调用不了 什么鬼
看一下它所在的包名 :
- com.android.internal.policy.PolicyManager
!!!这根本就不在 android.jar 里
这怎么才能找到这个包里的源码呢
用我上一篇博客说的:http://grepcode.com/ 这个源码浏览网站
找到这个PolicyManager 类里的:
public static Window makeNewWindow(Context context) {
return sPolicy.makeNewWindow(context);
}
再看一下 sPolicy 是什么
<