在activity中,通過setcontentview就可以顯示xml的布局檔案了,也就是把乙個個view控制項組合在一起,首先,這個activity的方法setcontentview有三個過載的方法。
public void setcontentview(int layoutresid)
public void setcontentview(view view)
public void setcontentview(view view, viewgroup.layoutparams params)
可以看出,三個方法什麼也沒用做,只是呼叫了getwindw方法。看一下getwindow方法,僅僅是
public window getwindow()
mwindwow是在attach方法中建立的,看一看attach方法。有這兩行**
mwindow = policymanager.makenewwindow(this);
mwindow.setcallback(this);
首先,看看policymanager.makenewwindow(this)是如何處理的。
//通過反射的方式,建立乙個ipolicy的例項物件。
public final class policymanager catch (classnotfoundexception ex) catch (instantiationexception ex) catch (illegalacces***ception ex)
} // 建構函式私有,保證是單例類
private policymanager() {}
// the static methods to spawn new policy-specific objects
public static window makenewwindow(context context)
public static layoutinflater makenewlayoutinflater(context context)
public static windowmanagerpolicy makenewwindowmanager()
}
檢視policy原始碼會發現,是new了乙個phonewindow的例項。那麼getwindow返回的就是乙個phonewindow了。裡面肯定也有三個setcontentview方法了。
public void setcontentview(int layoutresid) else
//載入xml布局到mcontentparent中,所以,我們可以猜想installdecor();肯定是可以得到乙個mcontentparent的。
mviewinflate.inflate(layoutresid, mcontentparent, minflateparams);
在activity的attach方法中,還記得我們執行了一句mwindow.setcallback(this);由此看見,這個cb就是這個activity自己。當activity發生變化,就會執行oncontentchanged方法。
android.view.window.callback cb = getcallback();
if(cb != null)
cb.oncontentchanged();
}
檢視installdecor方法
private void installdecor()
}if (mcontentparent == null)
}
看一下如果mcontentparent為null的時候,如何進行的。
protected viewgroup generatelayout(decorview decor)
根據上面的分析,可以知道setcontentview都做了哪些事情。
1:獲得phonewindow物件。
2:判斷是否存在mcontentparent,不存在的話就安裝乙個decorview,作為整個介面的根布局,裡面有乙個flamelayout,其實就是mcontentparent,而我們setcontentview,把xml或者view作為mcontentparent的子view來處理。
KVM Qemu Libvirt三者之間的關係
原始出處 作者資訊和本宣告。否則將追究法律責任。qemu qemu 是乙個模擬器,它向 guest os 模擬cpu 和其他硬體,guest os 認為自己和硬體直接打交道,其實是同 qemu 模擬出來的硬體打交道,qemu 將這些指令轉譯給真正的硬體。由於所有的指令都要從 qemu 裡面過一手,因...
KVM Qemu Libvirt三者之間的關係
在所謂的kvm技術中,應用到的其實有2個東西 qemu kvm kvm負責cpu虛擬化 記憶體虛擬化,實現了cpu和記憶體的虛擬化,但kvm不能模擬其他裝置 qemu是模擬io裝置 網絡卡,磁碟 kvm加上qemu之後就能實現真正意義上伺服器虛擬化。因為用到了上面兩個東西,所以一般都稱之為qemu ...
KVM Qemu Libvirt三者之間的關係
qemu qemu 是乙個模擬器,它向 guest os 模擬cpu 和其他硬體,guest os 認為自己和硬體直接打交道,其實是同 qemu 模擬出來的硬體打交道,qemu 將這些指令轉譯給真正的硬體。由於所有的指令都要從 qemu 裡面過一手,因而效能較差 kvm是linux核心的模組,它需要...