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

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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值