cloneable clone new intent(this)
setaction component_name addcategory addflags
getintent parseuri setdata category identified launchflags
package component schemas extra
getaction getdata getscheme gettype getcategories
getextra
activity
public boolean dispatchtouchevent(motionevent ev)
2742 if (getwindow().superdispatchtouchevent(ev))
2745 return ontouchevent(ev);
2746 }
2747
phonewindow
superdispatchtouchevent
@override
1718 public boolean superdispatchtouchevent(motionevent event)
mdecor = decorview
private final class decorview extends framelayout implements rootviewsu***cetaker
superdispatchtouchevent
dispatchtouchevent
viewgroup
dispatchtouchevent
activity
startactivity
startactivityforresult
instrumentation
executestartactivity
activitymanagernative.startactivity
startactivityforresult
上面這個方法就是intent獲取到activityinfo的核心,它的大致過程如下:
首先獲取intent的component物件,如果不為空,說明指定了component,
那麼就直接通過component找到activityinfo列表,並且這個列表size為1,
所以這個activityinfo就是指定需要跳轉的元件。
如果沒有指定component,那就是隱式intent呼叫,
接著獲取intent傳遞的需要跳轉的包名。
如果包名為空,則會通過activityintentresolver等進行模糊匹配,
比如根據action、category等。
如果包名不為空,則直接根據包名來獲取到對應的activityinfo物件,
而mactivities就是pms儲存的activity資訊表。
// 獲取intent的component物件
componentname comp = intent.getcomponent();
if (comp == null)
}// 不為空,是顯式intent,直接獲取到activityinfo返回
if (comp != null)
return list;
}// 為空,是隱式intent
synchronized (mpackages)
// 通過包名獲取到package物件
final packageparser.package pkg = mpackages.get(pkgname);
if (pkg != null)
return new arraylist();
}}
packagemanagerservice
queryintentactivities
componentname
mpackages.get pkgname
packagemanager
contextwraper
@override
public packagemanager getpackagemanager()
activitythread
getpackagemanager
servicemanager.getservice
systemserver systemserver run
msystemservicemanager = new systemservicemanager(msystemcontext);
localservices.addservice(systemservicemanager.class, msystemservicemanager);
packagemanagerservice main函式建立出來,並通過servicemanager
addservice
OkHttp原始碼初探
在之前的文章我中我們介紹了okhttp的基本使用方法並簡單說明了原始碼下各個module的功能作用,從這篇開始我們將要開始分析okhttp的原始碼。首先,我們先來回憶一下okhttp的使用過程 1.建立乙個okhttpclient物件 2.建立乙個request物件 3.呼叫okhttpclient...
RequireJS原始碼初探
前兩天跟著葉小釵的部落格,看了下requirejs的原始碼,大體了解了其中的執行過程。不過在何時進行依賴項的載入,以及具體的 在何處執行,還沒有搞透徹,奈何能力不夠,只能先記錄一下了。看原始碼從頭開始看,肯定是不切實際的。按照葉小釵的方法,是從data main開始的,所以我們也從那裡開始把!首先,...
RequireJS原始碼初探
前兩天跟著葉小釵的部落格,看了下requirejs的原始碼,大體了解了其中的執行過程。不過在何時進行依賴項的載入,以及具體的 在何處執行,還沒有搞透徹,奈何能力不夠,只能先記錄一下了。看原始碼從頭開始看,肯定是不切實際的。按照葉小釵的方法,是從data main開始的,所以我們也從那裡開始把!首先,...