在了解这部分功能之前,需要先了解一下浏览器的布局特点。在大部分应用里面,Activity的Layout文件是通过Activity::setContentView来指定的。不过浏览器的BrowserActivity有点特殊。他首先通过BrowserActivity所使用的DecorView取得其窗口内容的根View (由com.android.internal.R.id.content指定,请注意这里是窗口内容的根,并不是所有View的根),然后把R.layout.custom_screen作为其第一个孩子加入。
R.layout.custom_screen是FrameLayout类型,在全屏幕的情形(主要是视频),显示fullscreen_custom_content部分。否则显示LinearLayout节点的内容。
BrowserActivity主要成员介绍:
BrowserActivity::mCustomViewContainer,全屏使用的布局;
BrowserActivity::mContentView,非全屏布局
BrowserActivity::mErrorConsoleContainer,不了解;
视频播放流程(这个动作是由用户发起,DOM作为事件的传递者):
(C++)
MediaDocument::defaultEventHandler
HTMLMediaElement::play
HTMLMediaElement::playInternal
HTMLMediaElement::updatePlayState
MediaPlayer::play
MediaPlayerVideoPrivate::play,调用Java层得HTML5Video