前言
Android 中Application是单例,这个问题可能大家会毫不犹豫的回答正确
但是,如果APP中如果有集成一些第三方SDK的
并且在Application中加了打印的可能就会发现,APP启动的时候
怎么onCreate中的打印走了多次
不是说Application只会实例化一次的吗?
因为onCreate走了多次,说明创建了多个
那这个问题答案应该明朗了,在某种情况下,Application不唯一了
那这种情况是什么情况呢?
答案是:多进程
一般我们开发可能极少,除非一些特别的APP,可能我们都不会指定多进程
那为啥集成了第三方SDK会出现这种情况呢
是因为有些SDK指定了组件运行在特别的进程
文末有免费福利哦
那为啥第三方SDK会使用多进程?多进程带来的好处是什么?又有什么坏处呢?
进程
Android系统是底层是由Linux改造而来的
进程系统也是一致的,进程,就是程序的具体实现
当程序第一次启动,Android会启动一个Linux进程(具体由Zygote fork出来)和一个主线程
默认的情况下,所有组件都将运行在该进程内
同一个应用由系统分配一个独立的Linux账户,应用的产生的所有进程,都会是这同一个Linux账户
多进程Application会创建多个
很明显带来的问题就是Application的onCreate方法会执行多次
如果在onCreate方法中,做了初始化的操作,将会导致多次初始化操作
如果是启动的时候就执行的,将会导致启动时间延长
将组件指定在单独的进程
指定多进程是在AndroidManifest.xml里面配置
Android四大组件activity,service,provider, receiver
可以通过android:process属性来指定运行所在的进程
不指定默认就是运行在系统分配的进程
也可以修改默认进程 设置Application的android:process属性,来设置所有组件的默认进程
进程名分两种:
- 如果以冒号开头,比如":com.gaode.map"