Android 10深色主题适配踩坑记录

1. 问题简述
Android 10 推出了深色主题,便于用户根据白天和夜晚自由切换合适的主题。在适配的过程中,要特别注意,切换主题会导致当前activity被重建,也就是会重新走一遍Activity的生命周期,就和横竖屏切换时会重新走生命周期一样,这时如果你正在处于录制视频的页面并且正在录制视频,如果你下拉打开通知栏,然后点击切换深色主题,就会导致当前的录制停止。

2. 问题分析
出现此文题的原因就是切换到深色主题时导致activity被重建了。有的解决方法是通过activity的onSaveInstanceState(@NonNull Bundle outState)来保存退出时的状态,然后在onResume()时再通过onRestoreInstanceState(@NonNull Bundle savedInstanceState) 恢复数据,这种方式我个人觉得在录制视频时不可行,因为类似于Camera这种系统的app,在onPause()和onResume()方法中都会做很多的操作,如相机的状态,各种数据的保存等等,如果都靠上述两个方法来恢复和保存,那就太繁琐了吧,而且在相机录像过程中切换主题导致录像停止是不允许的,用户会觉得很奇怪。

3. 问题解决
当然用activity的保存和恢复方案在某些情况也是可行的,主要是视情况而定吧。在录制视频时,我用的方式是在AndroidManifest.xml中的相关ACtivity中加上: android:configChanges=“uiMode”,然后在对应的activity中重写onConfigurationChanged(Configuration newConfig) 方法就行,这样的话,再执行切换主题时,就会去执行onConfigurationChanged()方法,而不会重新走activity的生命周期了。(在此特别注意,有时候在开发系统app时,运行app的方式是通过“adb push 自己编译出apk的目录 系统apk"目录的方式来运行调试的,这种方式可以免去很多权限上的问题,但是这种情况先AndroidManifest.xml文件已经解析过了,也是是说你再修改AndroidManifest文件,push到系统的相应目录时,也不会起作用了。如果你正好在适配Android10深色主题,那么你要注意,这时你在AndroidManifest中增加uiMode的属性,在Activity中并不能收到onConfigurationChanged()方法的回调,因为系统压根就没有去解析AndroidManifest.xml文件)就因为这个,我查了一天为啥不走onConfigurationChanged()方法,还是得加强学习呀。

你可能感兴趣的:(Android,使用注意事项)