一、类图 二、 ActivityThread ActivityThread代表进程的主线程,创建完新进程后ActivityThread.mai
ActivityThread代表进程的主线程,创建完新进程后
ActivityThread.main
函数被加载,执行loop的循环使当前线程进入消息循环,且作为主线程。
public static void main(String[] args) {
......
Looper.prepareMainLooper();
......
ActivityThread thread = new ActivityThread();//实例化
thread.attach(false, startSeq);//实例化的ActivityThread对象赋值给sCurrentActivityThread成员变量
if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();//mainHandler UI线程
}
......
Looper.loop();//UI线程looper开始循环
throw new RuntimeException("Main thread loop unexpectedly exited");
}
thread.attach将实例化的ActivityThread赋值给sCurrentActivityThread成员变量,通过currentActivityThread函数获取
private void attach(boolean system, long startSeq) {
sCurrentActivityThread = this;
......
}
public static ActivityThread currentActivityThread() {
return sCurrentActivityThread;
}
三、ApplicationThread
ApplicationThread是ActivityThread内部类,继承自IApplicationThread.Stub,作为服务端接受AMS发出的请求并执行,ApplicationThread是ActivityThread与AMS连接的桥梁。
四、HH是ActivityThread内部类,继承自Handler,他是主线程的Handler,通过H可以往UI的MessageQueue发消息启动Activity、service,接收广播等,H可以通过getHandler函数获取。
final Handler getHandler() {
return mH;
}
H中有不同的case来执行各种UI业务,比如create流程,如下流程图是我分析bindService(Binder机制)时画的,拿过来直接分析。该流程AMS执行bindServiceLocked消息跨进程执行服务端ApplicationThread,ApplicationThread在执行scheduleCreateService发送H.CREATE_SERVICE消息至H,H再将消息中转至ActivityThread。
从流程可以看出,AMS作为客户端,ApplicationThread作为服务端,AMS跨进程执行ApplicationThread函数,再通过中转H将消息传递给ActivvityThread。
一下是H.handleMessage中的不同的case
public void handleMessage(Message msg) {
switch (msg.what) {
......
case BIND_SERVICE: //绑定服务
handleBindService((BindServiceData)msg.obj);
break;
case UNBIND_SERVICE: //解绑服务
handleUnbindService((BindServiceData)msg.obj);
break;
case STOP_SERVICE: //停止服务
handleStopService((IBinder)msg.obj);
break;
case EXECUTE_TRANSACTION: //startActivity会走该case
final ClientTransaction transaction = (ClientTransaction) msg.obj;
mTransactionExecutor.execute(transaction);
......
break;
case RELAUNCH_ACTIVITY:
handleRelaunchActivityLocally((IBinder) msg.obj);
break;
}
......
}
}
五、流程图
参考
关于ActivityThread和ApplicationThread的解析
--结束END--
本文标题: Android API 28 ActivityThread&ApplicationThread解析
本文链接: https://www.lsjlt.com/news/29020.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0