之前一片文章,学习了ActivityThread是App的真正入口,他在内部维护了一个ApplicationThread对象,他和远程的ams进行通信。当创建Activity时,调用ams通过Binder机制调用ApplicationThread对象的方法,进而调用ActivityThread中的handleResumeActivity方法,最终调用Activity中的onResume()方法。
在以前的印象中onResume()这个生命周期表示当前的Activity对用户可见,这是不是表示onResume()之前页面就已经绘制出来了呢?Activity的UI实在什么时候开始绘制的呢?带着这些疑问来研究研究。。。
/**
* <p>Keep in mind that onResume is not the best indicator that your activity
* is visible to the user; a system window such as the keyguard may be in
* front. Use {@link #onWindowFocusChanged} to know for certain that your
* activity is visible to the user (for example, to resume a game).
* 只有当onWindowFocusChanged方法被调用的时候,才能确认当前的Activity对用户的可见的
*/
@CallSuper
protected void onResume() {
if (DEBUG_LIFECYCLE) Slog.v(TAG, "onResume " + this);
getApplication().dispatchActivityResumed(this);
mActivityTransitionState.onResume();
mCalled = true;
}
我去,颠覆三观,一直以为onResume的时候,Activity就对用户可见了。
为了研究这个问题,还得回到Act

本文探讨了Android应用中ActivityThread的角色,它如何管理ApplicationThread并与AMS通信。通过分析onResume()的调用时机,揭示了onResume()并不等同于Activity对用户完全可见,而是在performResumeActivity方法中触发,包括调用onResume()、绘制UI以及makeVisible()方法。这一发现挑战了对Activity生命周期的传统认知。
最低0.47元/天 解锁文章
600





