生命周期方法onCreate()中实际的saveInstance对象在哪里?

问题描述 投票:0回答:1

对象saveInstanceState在哪里实例化?它不应该在某处说这样的val savedInstance = SavedInstanceState()吗?

MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(R.layout.activity_main)

   }
}
android oop kotlin android-lifecycle
1个回答
0
投票

由平台代码实例化。更具体地说,负责跟踪应用程序活动状态的主要系统组件是ActivityManagerService。该组件将有关savedInstanceState的信息转发到适当的应用程序进程。

一旦应用进程获得此信息,它就会运行本地代码来管理例如savedInstanceState。如果在onCreate()中设置了断点,则可以调查导致onCreate()方法产生的调用堆栈。 savedInstanceState是从该调用堆栈中发出的。对于不同的Android版本,它可能会有所不同,但就我而言,在Android 10上,堆栈看起来像这样:

onCreate:183, MainPagerActivity (com.mydomain.android.activity)
performCreate:7802, Activity (android.app)
performCreate:7791, Activity (android.app)
callActivityOnCreate:1306, Instrumentation (android.app)
performLaunchActivity:3245, ActivityThread (android.app)
handleLaunchActivity:3409, ActivityThread (android.app)
execute:83, LaunchActivityItem (android.app.servertransaction)
executeCallbacks:135, TransactionExecutor (android.app.servertransaction)
execute:95, TransactionExecutor (android.app.servertransaction)
handleMessage:2016, ActivityThread$H (android.app)
dispatchMessage:107, Handler (android.os)
loop:214, Looper (android.os)
main:7356, ActivityThread (android.app)
invoke:-1, Method (java.lang.reflect)
run:492, RuntimeInit$MethodAndArgsCaller (com.android.internal.os)
main:930, ZygoteInit (com.android.internal.os)

例如,您可以看到调用链中的代码是这样的:

    private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {

还有一点点向下:

                activity.mCalled = false;
                if (r.isPersistable()) {
                    mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState);
                } else {
                    mInstrumentation.callActivityOnCreate(activity, r.state);
                }

其中r.state是您通过的savedInstanceState

您可以继续在此过程中添加和添加细节,但希望这足以消除获得savedInstanceState的“魔力”。

© www.soinside.com 2019 - 2024. All rights reserved.