Activity啟動流程分析

2021-08-04 03:01:22 字數 2200 閱讀 5962

啟動之前的程序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...