You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.3 KiB
53 lines
1.3 KiB
6 years ago
|
---
|
||
|
View 工作原理
|
||
|
---
|
||
|
|
||
|
#### 目录
|
||
|
|
||
|
1. 思维导图
|
||
|
2. 概述
|
||
|
3.
|
||
|
4. 参考
|
||
|
|
||
|
#### 思维导图
|
||
|
|
||
|
#### 概述
|
||
|
|
||
|
1. 初始化 PhoneWindow 和 WindowManager
|
||
|
2.
|
||
|
|
||
|
#### 步骤一:初始化 PhoneWindow 和 WindowManager
|
||
|
|
||
|
在 Activity 的 onCreate、onStart、onResume 等生命周期被调用之前,attach 方法将先会被调用,因此将 attach 方法作为这篇文章主线的开头:
|
||
|
|
||
|
```java
|
||
|
// Activity#attach():
|
||
|
|
||
|
final void attach(...) {
|
||
|
attachBaseContext(context);
|
||
|
//初始化 PhoneWindow
|
||
|
mWindow = new PhoneWindow(this, window, activityConfigCallback);
|
||
|
|
||
|
//初始化 WindowManager
|
||
|
mWindow.setWindowManager(
|
||
|
(WindowManager)context.getSystemService(Context.WINDOW_SERVICE),
|
||
|
mToken, mComponent.flattenToString(),
|
||
|
(info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0);
|
||
|
mWindowManager = mWindow.getWindowManager();
|
||
|
}
|
||
|
|
||
|
// Window#setWindowManager():
|
||
|
|
||
|
public void setWindowManager(WindowManager wm, IBinder appToken, String appName,
|
||
|
boolean hardwareAccelerated) {
|
||
|
//...
|
||
|
if (wm == null) {
|
||
|
wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
|
||
|
}
|
||
|
mWindowManager = ((WindowManagerImpl)wm).createLocalWindowManager(this);
|
||
|
}
|
||
|
```
|
||
|
|
||
|
|
||
|
|
||
|
#### 参考
|