我们现在写activity的时候有时候是继承Activity的,不过大多数的时候都是默认继承AppCompatActivity的,在onCreate中自动给我们生成设置布局代码,即setContentView,那么我们查看一下setContentView具体的实现,以便加深我们对UI界面架构的了解
1、继承Activity
我们点击去看到
getWindow()返回的是mWindow,通过在这个文件中查找发现mWindow=new PhoneWindow(this, window, activityConfigCallback);其实PhoneWindow就是Window抽象类的一个子类。
查看方法:在我们的SDK中搜索,如我的SDK在e盘,那么我这样搜
将搜到的文件拖到studio中就看到了如下的图片
所以说每个Activity都包含一个Window对象,在Android中Window对象通常由PhoneWindow来实现。这就是为什么我们看到很多博客或者书籍中都有这样的图了
摘自Android群英传中33页2、继承AppCompatActivity
点进去是这样的
再点击setContentVIew进去是这样的
其实和第一种的Window差不多那么mDelegate是什么呢?我们继续看看
原来是根据我们的版本判断然后创建不同的对象。AppCompatDelegateImplN继承AppCompatDelegateImplV23,AppCompatDelegateImplV23继承AppCompatDelegateImplV14...AppCompatDelegateImplV9-->AppCompatDelegateImplBase-->AppCompatDelegate
总结
感觉两种都差不多
网友评论