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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android View的加载过程

發布時間:2025/7/14 Android 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android View的加载过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>


? ? 大家都知道Android中加載view是從Activity的onCreate方法調用setContentView開始的,那么View的具體加載過程又是怎么的呢?這一節我們做一下分析。


首先追蹤一下代碼:

Activity中:

public void setContentView(int layoutResID) {getWindow().setContentView(layoutResID); }public Window getWindow() {return mWindow; }final void attach {mWindow = PolicyManager.makeNewWindow(this); }

? ? ? Activity在調用onCreate()之前會調用attach()初始化mWindow,這篇文章中,我們先不管attach()是誰調用的,也不管他是怎么被調用的。只分析一下view的加載過程。下面是PolicyManager方法:

PolicyManager:

// sPolicy為Policy對象,實現了接口IPolicypublic static Window makeNewWindow(Context context) {return sPolicy.makeNewWindow(context);}


再看Policy類中的代碼?

// 這里就是返回了一個PhoneWindow對象 public PhoneWindow makeNewWindow(Context context) {return new PhoneWindow(context);}

從而可知 Activity中的setContentView 最終調用的是PhoneWindow類中的 setContentView.?

@Overridepublic void setContentView(int layoutResID) {if (mContentParent == null) {installDecor();} else {mContentParent.removeAllViews();}mLayoutInflater.inflate(layoutResID, mContentParent);final Callback cb = getCallback();if (cb != null && !isDestroyed()) {cb.onContentChanged();}}


installDecor()初始化了DecorView、mContentParent還有title(3.0以后的ActionBar)。DecorView是繼承自FrameLayout的PhoneWindow的內部類。

installDecor()中的代碼:

if (mContentParent == null) {mContentParent = generateLayout(mDecor);
再看 generateLayout

protected ViewGroup generateLayout(DecorView decor) {View in = mLayoutInflater.inflate(layoutResource, null);decor.addView(in, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));}

? ? 從上面的代碼看出,加載的視圖添加到了DecorView上,這樣Activitty加載視圖的過程就完成了。試圖加載過程中出現了Activity、Window、View。Activity是Android應用程序的載體,允許用戶在其上創建一個用戶界面,并提供用戶處理事件的API,如onKeyEvent, onTouchEvent等, 并維護應用程序的生命周期。每一個Activity組件都有一個關聯的Window對象,用來描述一個應用程序窗口。每一個應用程序窗口內部又包含有一個View(DecorView)對象,用來描述應用程序窗口的視圖。應用程序窗口視圖是真正用來實現UI內容和布局的,也就是說,每一個Activity組件的UI內容和布局都是通過與其所關聯的一個Window對象的內部的一個View對象來實現的。





/** * @author 張興業 * ?http://blog.csdn.net/xyz_lmn * ?android開發進階群: 281537853 * ?iOS入門群: 83702688 * ?我的新浪微博: @張興業TBOW */

轉載于:https://my.oschina.net/201003674/blog/288917

總結

以上是生活随笔為你收集整理的Android View的加载过程的全部內容,希望文章能夠幫你解決所遇到的問題。

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