• onCreate源码分析


    原文地址Android面试题-onCreate源码都没看过,怎好意思说自己做android

    Activity扮演了一个界面展示的角色,堪称四大组件之首,onCreate是Activity的执行入口,都不知道入口到底干了嘛,还学什么android,所以本文会从源码的角度对其进行分析。

    熟悉源码的会发现,真正启动Activity的实现都在ActivityThread,前面的调用过程略过

    ActivityThread的方法performLaunchActivity中调用了Instrumentation类中的方法callActivityOnCreate方法,继而调用了TargetActivity中的onCreate方法。

    private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
        ......
        Activity activity = null;
        activity = mInstrumentation.newActivity( cl, component.getClassName(), r.intent);               
        ......
        if (r.isPersistable()) {
             mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState);
        } else {
             mInstrumentation.callActivityOnCreate(activity, r.state);
        }
        ......
    }

    源码可知:

    1)通过反射的机制创建的Activity

    2)这里的mInstrumentation是类Instrumentation

    3)Instrumentation类中的方法callActivityOnCreate方法源码如下:

    public void callActivityOnCreate(Activity activity, Bundle icicle) {
        prePerformCreate(activity);
        activity.performCreate(icicle);
        postPerformCreate(activity);
    }

    源码可知:

    1)activity.performCreate(icicle),其中的方法是通过activity,这个activity,形如:Activity activity = 子Activity的对象

    2)在Activity类中的方法performCreate(icicle),源码如下:

    final void performCreate(Bundle icicle) {
            onCreate(icicle);
            mActivityTransitionState.readState(icicle);
            performCreateCommon();
    }

    源码可知:

    1)原来onCreate的生命周期方法是在这里回调的

    2)在performCreate方法中调用的onCreate方法是MainActivity中的onCreate方法,那么到此MainActivity中的方法onCreate方法中的参数Bundle savedInstanceState也就知道来源了,此时,MainActivity中的方法也就被调用了。

    再次看MainActivity中的方法onCreate:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        setContentView(R.layout.activity_main);
    super.onCreate(savedInstanceState),其实这条语句放在子类中的onCreate方法中的任何位置都可,问题只是super.onCreate(savedInstanceState)必须要被执行,所以,最好也就是放在第一行,看起来比较明确,至于为什么,参考onSaveInstanceState源码分析
    至此onCreate源码分析完毕。
  • 相关阅读:
    网络编程 并发-进程
    几个内置方法
    面向对象---两个内置函数和一些内置方法
    面向对象再进阶
    android设置图文提醒功能
    android 之实现手机震动功能
    android之实现选择对话框
    android 实现模拟加载中的程序
    android 简单对话框实现
    android 实现页面跳转及数据的传递和返回
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/8352272.html
Copyright © 2020-2023  润新知