1、performlaunchactivity( )
activitythread 中的performlaunchactivity ( )在通過classloader載入到mainactivity之後,反射出乙個 mainactivity物件activity,然後會呼叫activity.attach( ),在這個函式中,會建立window
//mwindow是activity的乙個成員
private window mwindow;
//可以看出window的最終實現是phonewindow
mwindow = new phonewindow(this, window);
2、那麼 window是如何與activity的檢視產生關係的呢?可以看一下activity的setcontentview( )函式public
void
setcontentview(@layoutres int layoutresid)
3、phonewindow的setcontentview()如下public void setcontentview(int layoutresid) else if (!hasfeature(feature_content_transitions))
if (hasfeature(feature_content_transitions)) else
final callback cb = getcallback();
if (cb != null && !isdestroyed())
mcontentparentexplicitlyset = true;
}
他主要是先建立decorview,然後把setcontentview()中傳入的布局新增到mcontentparent (r.id.content對應的布局,其中decorview是乙個framelayout,包含標題欄以及內容檢視,其中mcontentparent就是這個內容檢視)中.
4、檢視顯示時機
但是目前為止,decorview還沒有顯示出來,它需要被新增到windowmanager中,activitythread執行handleresumeactivity( )的時候,先呼叫activity的onresume( ),再呼叫activity的makevisible( )函式,此時頁面才真正滴顯示出來
void makevisible()
mdecor.setvisibility(view.visible);
}
解釋activity棧 activity的載入模式
activity棧 activity棧是乙個先進先出 包含所有正在執行的activity的佇列。乙個activity的狀態,對於開發者來說是無法控制的,是由系統決定的。那麼activity是按照什麼邏輯來運作的呢,這就要了解activity棧了,每個activity的狀態都是由它在activity棧...
非Activity下跳轉Activity的問題
override public void startactivity intent intent,bundle options mmainthread.getinstrumentation execstartactivity activity null,intent,1,options 避免這種異常...
處理非window設定為window的Owner
普通wpf視窗從乙個window1 show方式 開啟另乙個window2,只要設定window2.owner window1即可。這樣window2的顯示和隱藏可由window1自動控制。但使用wpf usercontrol host到winform時,實現就難了。剛才找到了解決方法 hwndso...