Activity生命周期的執(zhí)行與系統(tǒng)進程中的ActivityManagerService密切相關(guān)臀稚,同時也與相關(guān)應(yīng)用進程聯(lián)系,這就涉及到進程(線程)間通信問題三痰。system_server是系統(tǒng)進程吧寺,是java framework的核心載體窜管,其中運行著大量的系統(tǒng)服務(wù),比如ApplicationThreadProxy(ATP)稚机、ActivityManagerService(AMS)幕帆,這個兩個服務(wù)都運行在system_server進程的不同線程中,由于ATP和AMS都是基于IBinder接口赖条,都是binder線程失乾,binder線程的創(chuàng)建與銷毀都是由binder驅(qū)動來決定的。
APP進程是應(yīng)用進程纬乍,主線程主要負責Activity/Service等組件的生命周期以及UI相關(guān)操作仗扬; 另外,每個App進程中至少會有兩個binder線程 ApplicationThread(AT)和 ActivityManagerProxy(AMP)蕾额。
Binder用于不同進程間通信早芭,由一個進程的binder客戶端向另一個進程的服務(wù)端發(fā)送事件;Handler用于不同線程間通信。
暫停Activity事件:
線程1中的AMS調(diào)用線程2中的ATP來向線程4發(fā)送暫停事件(同一進程的線程間共享存儲空間诅蝶,可以直接相互調(diào)用);
線程2通過Binder向線程4發(fā)送暫停Activity事件;
線程4通過Handler向同進程中的主線程ActivityThread發(fā)送暫停Acitvity事件;
主線程在looper.loop()中循環(huán)遍歷消息退个,當收到暫停Activity的消息(PAUSE_ACTIVITY)時,便將消息分發(fā)給ActivityThread.H.handleMessage()方法调炬,再經(jīng)過方法的層層調(diào)用语盈,最后便會調(diào)用到Activity.onPause()方法。
Activity的生命周期缰泡,都是其他線程通過handler發(fā)送消息給主線程刀荒,主線程中的ActivityThread的內(nèi)部類H控制整個核心消息處理機制,通過H.handleMessage()來控制Activity的生命周期棘钞。一般來說主線程收到消息缠借,都會調(diào)用相應(yīng)handlexxx方法,比如宜猜,LAUNCH_ACTIVITY則對應(yīng)handleLaunchActivity泼返,RESUME_ACTIVITY則對應(yīng)handleResumeActivity等。
由于ATP和AMS都是基于IBinder接口姨拥,都是binder線程绅喉,binder線程的創(chuàng)建與銷毀都是由binder驅(qū)動來決定的,每個進程binder線程個數(shù)的上限為16叫乌。