Android应用启动的入口
android启动入口不是onCreate,而是ActivityThread的main。
ActivityThread的main方法
1、Envrionment.initForCurrentUser() 初始化应用中所使用的系统路径
2、EventLogger.setReporter(new EventLoggingReport()) 在libcore中为事件日志设置一个reporter
3、Security.addProvider(new AndroidKeyStoreProvider()) 增加一个保存key的provider
4、TrustedCertificateStore..setDefaultUserDirectory(configDir) 为应用设置当前用户的CA证书保存的位置
5、Process.setArgV0("<pre-initialized") 设置进程的名称
6、Looper.prepareMainLooper() 初始化主线程的looper
7、ActivityThread thread = new ActivityThread() thread.attach(false) 创建ActivityThread对象并调用attach
8、Looper.loop() 让looper无限循环起来,进入消息循环
什么时候调用ActivityThread中的main方法呢?
从Zygote进程fork出来应用进程后,会通过反射方法来调用,具体是通过RuntimeInit的invokeStaticMain方法调用
ActivityThread一个应用有几个呢?
一个应用只会创建一个,启动的activity都保存在ActivityThread的mActivities中,这是一个ArrayMap<IBinder,ActivityClientRecord>
网友评论