调用startActivity后变量赋值的执行顺序及生效原因咨询
Android中startActivity后赋值操作的执行顺序问题
核心结论
my_boolean=true;这行赋值操作会在**startActivity(intent)调用完成后、新Activity真正启动之前**执行。
原因解析
Android的startActivity()方法并不是立即启动目标Activity,它的本质是向系统的ActivityManagerService(AMS)发送一个启动请求,这个请求是异步处理的。
当前代码运行在主线程时,主线程会优先完成当前代码块内的所有同步执行逻辑,只有当当前代码块执行完毕后,主线程的Looper才会去处理AMS发来的启动新Activity的消息。具体执行流程是:
- 先执行
startActivity(intent),向AMS提交启动请求 - 紧接着同步执行
my_boolean=true;,完成变量赋值 - 等当前代码块的所有代码都执行完毕,主线程才会响应AMS的请求,切换到新Activity
关于赋值生效的疑问
你看到界面跳转到新Activity,但my_boolean依然被成功赋值,是因为赋值操作是在当前Activity的主线程同步完成的,完全不会被startActivity()的异步启动逻辑打断。新Activity的界面切换是后续才发生的,不影响当前代码的执行顺序。
内容的提问来源于stack exchange,提问作者pequeñaluna
相关产品推荐
相关产品推荐

