Activity onStart()之后到底可不可见?
Activity onStart()之后到底可不可见,这个问题相信大多数初学者都看过网上帖子,大多都是说, onstart表示Activity可见,但是还不能与用户进行交互, onResume表示此时Activity从后台切换到前台,可以与用户进行交互。
对于这个问题,我看了源码之后其实说的也没有错,但是过于片面。
首先,你的了解些Activity正在绘制流程,这里网上很多我就不多写了 ,引用两篇文章,大家可以参考下源码看。
安卓应用启动流程(从点击Launcher图标开始) - 简书
View绘制流程—performResumeActivity—>performTraversals_移动开发_点滴积累-CSDN博客
上面两篇文章大家看完,并对面源码,你会发现确实是这样,view绘制的起点就是从onResme开始的,难道网上都说错了onStart就是不可见吗?
其实大家翻看源码就会发现
在调用ActivityThread调用handleResumeActivity之前还调用了,handleStartActivity,

这是设置activity的状态为onStart,我们注意下 activity.performStart("handleStartActivity");
接下来看看activity.performStart干了啥
final void performStart(String reason) {
.....伪代码.....
mActivityTransitionState.enterReady(this);
}
在这个方法的末尾,掉了enterReady,上代码

看到这里,我相信我不需要多说什么了,
总结:
1.在创建一个没有启动的Activity的时候,onStart,之后activity 是不可见的,onResume之后activity才可见
2.对于一个已经创建了的activity重新走生命周期(如从别的页面返回,从后台返回),onStart就可见了,但是不可交互,就是还没有获取焦点,onResume获取焦点
网友评论