Android新手咨询:Activity类的实例化位置在哪里?
Android Activity类是在哪里被实例化的?
嘿,这个问题问得特别戳中新手的痛点——我刚学Android的时候也纠结过:为啥咱从来不用new MainActivity()来创建Activity,它到底是咋来的?
其实答案很明确:Activity的实例化是由Android系统的核心服务——ActivityManagerService(简称AMS)主导,由你的应用进程里的ActivityThread类完成的,具体过程拆解开是这样的:
- 当你在代码里调用
startActivity()或者startActivityForResult()时,这个请求并不是直接创建Activity,而是通过跨进程通信(Binder机制)把启动请求发送给系统的AMS - AMS会先做一系列校验:比如你要启动的Activity有没有在
AndroidManifest.xml里注册、当前应用有没有启动权限、Activity栈的状态是否允许启动这个页面等等 - 校验通过后,AMS会确定这个Activity的栈位置,然后再通过Binder通知你的应用进程里的ActivityThread类:“该创建这个Activity实例了”
- ActivityThread收到指令后,会用Android的类加载器(ClassLoader)加载你写的Activity类,然后调用它的无参构造方法完成实例化(划重点:所以你的Activity必须要有无参构造,不然系统没法创建实例,会直接崩溃!)
- 实例化完成后,ActivityThread才会依次调用Activity的
onCreate()、onStart()等生命周期方法,让Activity真正“活”起来
还要提醒你一个关键:千万别自己手动new Activity实例!因为系统创建的Activity会和AMS、WindowManagerService等核心服务绑定,拥有完整的生命周期和窗口管理能力;而你自己new的实例没有这些绑定,调用onCreate()也没法加载布局、显示界面,完全是个“残废”对象。
内容的提问来源于stack exchange,提问作者judy
相关产品推荐
相关产品推荐

