啟動之前的程序zegore程序孵化先不講解。
先從acitvity裡面開始 startactivity
開啟乙個activity
class activity
@override
public
void
startactivity(intent intent)
然後 我們發現執行的是startactivityforresult這個方法
class
activity
@override
public void startactivity(intent intent, @nullable bundle options) else
}
繼續看 startactivityforresult
其中有兩個重點
1. instrumentation.activityresult ar = minstrumentation.execstartactivity(this, intent, requestcode, options);
注意這裡 minstrumentation
instrumentation.activityresult ar 不為空就接著 執行mmainthread
mmainthread 是 執行緒 activitythread 執行緒去執行了傳送訊息
2. mmainthread.sendactivityresult( mtoken, membeddedid, requestcode, ar.getresultcode(), ar.getresultdata());
這裡先不詳細分析 目前兩條分支, 看完此段原始碼 我們分析
class
activity
public void startactivityforresult(@requirespermission intent intent, int requestcode,
@nullable bundle options)
if (requestcode >= 0)
cancelinputsandstartexittransition(options);
// todo consider clearing/flushing other event sources and events for child windows.
} else else
}}
我們分支1.看
1. instrumentation.activityresult ar = minstrumentation.execstartactivity(this, intent, requestcode, options);
略過其他** 看帶漢字的注釋
public activityresult execstartactivity(
context who, ibinder contextthread, ibinder token, activity target,
intent intent, int requestcode, bundle options)
if (mactivitymonitors != null)
break;}}
}}
try catch (remoteexception e)
return
null;
}此時呼叫 activitymanagernative.getdefault().startactivity
activitymanagernative 實現了 iactivitymanager介面
public
abstract
class
activitymanagernative
extends
binder
implements
iactivitymanager
activitymanager**類 activitymanagerproxy 實現 iactivitymanager介面
class
activitymanagerproxy
implements
iactivitymanager
Activity啟動流程
0x01 public void startactivity intent intent 最終走到 public void startactivityforresult requirespermission intent intent,int requestcode,nullable bundle ...
Activity啟動流程
activity啟動流程很多文章都已經說過了,這裡說一下自己的理解。activity啟動流程分兩種 後邊啟動activity的流程是一樣的,區別是前邊判斷程序是否存在的那部分。activity啟動的前提是已經開機,各項程序和ams等服務已經初始化完成,在這裡也提一下那些內容。ipc 跨程序通訊,an...
activity啟動流程
所有程序都是由init程序直接或間接fork出來的 android系統啟動時,init程序會fork出zygote,意為 受精卵 後面的所有程序都是zygote 出來的 在zygote程序初始化時會啟動systemserver程序,平時所用到的ams pms wms 網路等服務都是在systemse...