Android Application是单例,正确吗?

本文探讨了Android Application并非总是单例的情况,特别是在多进程环境下。当集成第三方SDK或手动配置组件运行在不同进程时,可能会导致Application的onCreate方法被多次调用。文章详细解释了多进程的原因、好处和问题,如静态变量和单例模式失效、线程同步失效,并提供了避免Application多次初始化的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值