Android源码解读
接触Android已经一年多了,迷迷糊糊的也编写了一年代码了,也有很多成品的项目,但是总感觉自己的代码写的不是那么的规范,没有特点,
我认为写代码跟一个人写字应该是一样,我们应该有自己的特点,让代码承载我们的灵魂。
所以我决定,阅读Android的源码,让源码给我更多的启发还有灵感。我是一个初入Android的小菜鸟,写的不好,请大家指出,大家共同学习,进步。
1.setContentView();
进入setContentView()中源码如下:
public void setContentView(int layoutResID) {
getWindow().setContentView(layoutResID);
initActionBar();
}
首先,系统首先通过getWindow()方法获取到Window对象mWindow,接下来让我们看看系统是如何获得到mWindow对象的,代码如下:
mWindow = PolicyManager.makeNewWindow(this);
mWindow.setCallback(this);
mWindow.getLayoutInflater().setPrivateFactory(this);
由上面的代码我们可以看到系统通过PolicyManager对象创建了一个新的窗体。PolicyManager类位于framework\base\core\java\com\android\internal\policy目录中的PolicyManager.java文件中。如果有兴趣的可以查看源码,这里就不做讲解,因为我无法进入这个类中。
接下来让我们看一下findViewById()方法的源码:
public View findViewById(int id) {
return getWindow().findViewById(id);
}
也是通过getWinddow()方法获取到Window对象,进入方法中代码如下:
public View findViewById(int id) {
return getDecorView().findViewById(id);
}
Window类中的 getDecorView()获取到最顶层的View ,继续进入代码
public final View findViewById(int id) {
if (id < 0) {
return null;
}
return findViewTraversal(id);
}
我理解findViewTraversal()的作用是遍历整个窗体中的所有控件,通过传递的ID 返回特定的控件。
通过Android的这些代码,让我对窗体有了更好的认识,结合面向对象的思想,我更好的理解了窗体的概念。
我的理解如下:
Android 的屏幕就是一个对象,我们需要充实这个屏幕,无论是listview 还是textview 或者是button,我们都可以理解为这是这个屏幕的一个属性,
通过这些属性,构建出来了多姿多彩的屏幕对象。
而点击,滑动,等一系列操作,就是屏幕对象的方法,这个屏幕支持你滑动,按压,等等。