日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

onCreate源码分析

發布時間:2025/3/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。