MicroKibaco / CrazyDailyQuestion

每日一问: 水滴石穿,聚沙成塔,坚持数月, 必有收获~
35 stars 1 forks source link

2019-12-04: 使用热修复技术有哪些注意事项? #62

Open MicroKibaco opened 4 years ago

MicroKibaco commented 4 years ago
  1. 注入前加载的类(比如:Application 类) 肯定是不能被修复的

    • 保底方案: 在没法应用部署或者热部署失败方案下,最后应用代码冷启动重启生效方案生效,所以我们的补丁是同一套
  2. 热修复在初始化过程中,可以放到attatchBaseContext 进行初始化,但是,attatchBaseContext,有相当多的限制,比如:不能进行网络请求下载新补丁,因为App申请的权限还没有授予完成,然后有人会问了,我放oncreate不就行了,其实放oncreate 问题也有,如果你的清单文件里面有内容提供者,或者其他第三方Application里面有内容提供者,ContentProvider是优先Application.onCreate加载的,具体先后顺序如下:

Application.attatchBaseContext -> ContentProvider.onCreate -> Application.onCreate -> Activity.onCreate,所以为了保险起见,还是将入口类放在attatchBaseContext比较好

  1. BuildConfig 是编译期动态生成的,属于非系统类,获取版本信息会导致提前引入问题,所以建议使用PackageManager 来获取版本号。