不说硬话,不做软事
最近公司项目游戏中心需要对视频播放功能进行优化升级,Android端目前最火的播放器那必须是Google家的 ExoPlayer …
PS: 哔哩哔哩的 ijkplayer 当年独领风骚,如今不在维护更新,So …
进入正题,在探索ExoPlayer的过程中,发现了有趣的现象。
在ExoPlayer的Demos中,播放相关的逻辑主要集中在PlayerActivity.java文件中,看到如下 诡异的一幕:
...
@Override
public void onStart() {
super.onStart();
if (Util.SDK_INT > 23) {
initializePlayer();
if (playerView != null) {
playerView.onResume();
}
}
}
@Override
public void onResume() {
super.onResume();
if (Util.SDK_INT <= 23 || player == null) {
initializePlayer();
if (playerView != null) {
playerView.onResume();
}
}
}
@Override
public void onPause() {
super.onPause();
if (Util.SDK_INT <= 23) {
if (playerView != null) {
playerView.onPause();
}
releasePlayer();
}
}
@Override
public void onStop() {
super.onStop();
if (Util.SDK_INT > 23) {
if (playerView != null) {
playerView.onPause();
}
releasePlayer();
}
}
...
WTF?在Activity的生命周期中居然还需要版本判断
正如你所见:
我长这么大没见过这么嚣张的人!
我坚信这绝对不是Google开发人员的『恶作剧』,本着真相只有一个的信念,我开始着手调查此事。
出了这样的事情,官方文档:Activity-lifecycle 自然是需要配合调查的。
还没用刑她就全招了…
Android 7.0( 24 ) 引入的多窗口支持特性引起Activity生命周期的细微变化。
而在多窗口支持中也对该种模式下的生命周期做出诠释:
我想,是时候考虑多窗口支持的事情啦…