launcher 啟動應用流程簡述
阿新 • • 發佈:2019-01-29
在Launcher程序中,首先呼叫startActivity(),然後呼叫startActivityForResult(),然後呼叫到Instrumention的execStartActivity(),最終呼叫ActivityMangerProxy的startActivity()。
以上過程是在Launcher程序中執行的,接下來通過Binder跨程序啟動微信應用。
instrumention儀表盤,是個工具類,每個程序都會有這個Instrumention的引用。 ActivityMangerProxy是ActivityMangerService的代理物件,Binder的Client端。
AMP的startActivity()通過Binder呼叫到AMS的startActivity(),AMS 經過一系列過程,呼叫zygoteSendArgsAndGetResult()方法,通過socket向zygote傳送請求,fork一個新程序。
zygote fork出新程序後,會執行ActivityThread的main方法,在該main方法中會準備好Looper和訊息佇列,然後呼叫attach方法將微信程序新增到AMS中,然後進入Looper迴圈,不斷讀取並處理訊息。
AMS會儲存微信程序的一個代理物件,並通過這個代理物件,通知微信程序建立入口Activity的例項,並執行生命週期。