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