ActivityGroup做了什么?
Activity和ActivityGroup的关系看起来很像View和ViewGroup,对比一下:
- ViewGroup继承了View并实现内部嵌入View。不管是View还是ViewGroup,在调用者看来都是一样的,只需要给它发送相应事件,并将View的内容显示到屏幕上
- ActivityGroup也继承了Activity,只是内部的Activity系统不会存档,不会像task那样做栈式切换。系统不知道这种Activity的存在,你也就没法给它发送intent
先看看普通Activity的运作过程:
这个有点复杂,先从启动app说起。
- 每个App有一个ActivityThread实例,启动都是从这里开始的。Activity启动后会新建binder等待ActivityManagerService(AMS)发送建立Activity的命令。执行监听的就是ApplicationThread类,而H是一个handler用于执行Activity的操作
- ApplicationThread接到新建Activity的命令时,就会调用H执行新建Activity的操作。
- 建立Activiyt的过程中,会建立一个PhoneWindow实例。每个PhoneWindow中都含有DecorView(View子类),调用setContentView()时就是给它添加子View。
- 建立PhoneWindow的过程中,会得到WindowManager实例,其中有W用于监听WindowManagerService(WMS)发出的事件。同时建立ViewRoot用于实现各种事件分发和刷新。View中的invalidate()方法调用parent.invalidate()执行刷新,最后就传到ViewRoot上了
这基本上就完成了一个正常健全的Activity的创建过程。而Activity内嵌的SubActivity就少了很多吧
有点偷懒的意思。新建SubActivity时不需要向AMS中发送新建的请求,AMS也就不知道这些SubActivity的存在,所以WindowManagerService也不会向SubActivity发送各种事件。所以说,SubActivity仅仅建立了一个不会起作用的窗口。窗口中的DecorView也没有设置ViewParent,所以你才可以将DecorView拿出来再添加到别的ViewGroup中。SubView的作用就相当于一个View,当然,它的各种事件虽然不会被AMS调用,但是会被ActivityGroup调用。这样内嵌的Activity就变得看似和正常Activity一样了。
总结一下:ActivityGroup做了什么?它在内部新建了Activity,拿出Activity内部View,并放在自己的View中进行显示;同时会将接收的Activity事件分发给内部Activity。后来的后来,Android又搞了个叫Fragment的东西来取代ActivityGroup的功能。
版权声明:本文为匿名原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。