Android源码解读 第一篇 初识源码

                                                                                                     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,我们都可以理解为这是这个屏幕的一个属性,

通过这些属性,构建出来了多姿多彩的屏幕对象。

而点击,滑动,等一系列操作,就是屏幕对象的方法,这个屏幕支持你滑动,按压,等等。



猜你喜欢

转载自blog.csdn.net/Y_xiaohe1234/article/details/45579675