activitythread

阅读 / 问答 / 标签

Android中为什么Activity的this指针值为ActivityThread而不是类名

在子类、还是在内部类中呢

ActivityThread和ApplicationThread是在main thread中执行?

主线程中会构造这两个类的对象。但是他们不是线程,你看看继承关系就可以知道ApplicationThread是binder, ActivityThread是一个final类也不是真正的线程。如果你用ddms查看某一个进程的所有线程,你会发现它只有一个main thread,当然它可能还有binder thread, jdwp, signal catcher等。

activitythread main方法在哪儿调用

在源码ZygoteInit这个类里,用的是反射

ActivityThread

我们学习 Android 过程中会发现,我们的文件都是 .java 文件,也就是说 Android 开发还是用的 Java 语言来编写的。也正是这样,所以你们来学 Android ,也会让你们先学习一段时间 Java 。掌握好了 Java 的相关知识,学起 Android 来可谓是事半功倍。好了,你们是不是感觉有点扯远了啊,不是说好讲 ActivityThread 类的么,其实并不如此。 你们在刚开始从 Java 学习转到 Android 学习的过程中,有一个重大的改变不知道你们又没有发现。那就是 Java 中的 main() 方法,程序的入口不见了,取而代之的是 onCreate() 方法。你们没有一点疑惑么?初学阶段直接无脑接受是对的,但是作为一个工作几年了的人来说,就有必要去深入研究一下了。明明 Android 也就是 Java 语言也编写的,差别咋就这么大呢? 其实呢, Android 中还是有 main() 方法的,只是隐藏的比较深而已。今天,就由我 AIqingfeng 来带你们一探究竟~! 我们先找到 ActivityThread 这个类,看一下注释( 较少 ,值得一看): 翻译一下就是:在 Application 进程中 管理执行主线程,调度和执行 活动和广播 ,和活动管理请求的其它操作。 Android 上一个应用的入口,应该是 ActivityThread 类,和普通的Java 类一样,入口是一个 main() 方法。 好了,现在我们解决了我们开始的疑惑后,再来深度学习一下这个类的一些知识吧。 ActivityThread 有几个比较重要的成员变量,会在创建ActivityThread对象时初始化。 final ApplicationThread mAppThread = new ApplicationThread(); ApplicationThread继承自ApplicationThreadNative, 而ApplicationThreadNative又继承自Binder并实现了IApplicationThread接口。IApplicationThread继承自IInterface。这是一个很明显的binder结构,用于与Ams通信。IApplicationThread接口定义了对一个程序(Linux的进程)操作的接口。ApplicationThread通过binder与Ams通信,并将Ams的调用,通过下面的H类(也就是Hnalder)将消息发送到消息队列,然后进行相应的操作,入activity的start, stop。 final H mH = new H(); 这个 H 大家首先会想到什么啊,不要开车哈。看到 H 想到了 Handler 。发现 H 是 ActivityThread 内部类,继承自 Handler ,果然没错。所以大家遇到不清楚的,不要怕,大胆的猜测一下。 Handler 最重要的的也就是 handleMessage() 方法了。查看一下其方法: ActivityThread.java 点进来咯。 ActivityThread.java 兴趣是最好的老师。ActivityThread.java 先探索一下 Activity 创建这条路吧。最底层啦。Instrumentation.java Native方法,C语言啦,活动创建之路结束了。Class.java 再来看看 Activity 中 onCreate() 方法执行之路吧。 Instrumentation.java 到了 Activity 了,哪里我们自己 Activity 还远么~! Activity.java 来,仔细瞅瞅~! Activity.java