前言
Android 官方为了弱化进程的概念提出了一个组件,我们都知道android 有四大组件:活动,服务,广播,内容提供器,这四大组件可以说是组成了一个android 系统吧.今天我们要来说的是四大组件之一 activity中的一部分东西:window(窗口).
actiivty需要做的事有很多,比如控制自己的生命周期,和系统服务通信.但是我们一般使用的活动看起来就是一个窗口控制器.具体是为什么呢?
activity窗口初体验
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
这是一个活动创建的第一个方法.我们看到了它为我们设置了一个界面,这个界面设置在哪,继续更进去看..
Activity
public void setContentView(@LayoutRes int layoutResID) {
getWindow().setContentView(layoutResID);
initWindowDecorActionBar();
}
可以看到我们里是通过getWindow()获取一个window,然后给它这是了一个布局.这个getWindow()获取到的是一个window对象,具体这是哪个对象,这个是特别容易找到的,在activity的attach()方法中实例化了,这个不是重点,我们知道这是一个phoneWindow对象就好了,接下来我们去看看phoneWindow的setContentView()方法吧.
Window的真面目
PhoneWindow
@Override
public void setContentView(int layoutResID) {
if (mContentParent == null) {
installDecor();
} else if (!hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
mContentParent.removeAllViews();
}
if (hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
final Scene newScene = Scene.getSceneForLayout(mContentParent, layoutResID,
getContext());
transitionTo(newScene);
} else {
mLayoutInflater.inflate(layoutResID, mContentParent);
}
mContentParent.requestApplyInsets();
final Callback cb = getCallback();