广告
返回顶部
首页 > 资讯 > 移动开发 >Android API 28 ActivityThread&ApplicationThread解析
  • 415
分享到

Android API 28 ActivityThread&ApplicationThread解析

apiAndroid 2022-06-06 13:06:01 415人浏览 八月长安
摘要

一、类图 二、 ActivityThread ActivityThread代表进程的主线程,创建完新进程后ActivityThread.mai

一、类图

ActivityThread类图

二、 ActivityThread

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连接的桥梁。

四、H

H是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的解析


作者:lynnlee_36


--结束END--

本文标题: Android API 28 ActivityThread&ApplicationThread解析

本文链接: https://www.lsjlt.com/news/29020.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作