Android中Looper#prepareMainLooper()已废弃,方案A与B该选哪一个?
选方案B,绝对不能用A!
直接给结论:必须选择方案B,方案A存在严重错误。
具体原因:
- 从API Level 30(Android 11)开始,主线程的Looper已经由系统自动完成初始化,开发者完全不需要手动调用任何Looper初始化相关方法。
- 方案A中
else分支调用的Looper.prepare()是专门用于子线程初始化Looper的API,在主线程中调用该方法会直接抛出RuntimeException——因为主线程的Looper早已存在,重复调用prepare()是不被允许的。 - 方案B的逻辑完全符合官方废弃说明的要求:仅在API Level 30以下的版本中调用
prepareMainLooper()完成主线程Looper初始化,API Level 30及以上版本无需做任何额外操作,依赖系统自动初始化即可。
额外提醒:如果是在子线程中需要使用Looper,无论哪个API版本都应该调用Looper.prepare()(后续记得配合Looper.loop()启动消息循环),但这和主线程的prepareMainLooper()场景完全不同,不要混淆。
内容的提问来源于stack exchange,提问作者progquester
相关产品推荐
相关产品推荐

