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源碼分析完畢。
總結
以上是生活随笔為你收集整理的onCreate源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于github和hexo搭建博客
- 下一篇: Mac MongoDB未正常关闭导致重启