关于Android切换系统字体大小和字体样式导致App崩溃或者界面错乱的问题
场景重现:主页面有一个ViewPager,有两页数据,滑动到第二页,然后切换字体,再切回app,app发生crash ,IndexOutOfBoundException
在字体切换之后,系统会发送一个通知给app,通知其更新界面,然而走的生命周期方法确实
onDestroy()->onCreate()->onResume();正常看起并没有什么不妥,但是:
此时app是作为一种异常走的onDestroy()方法,并不是正常的按返回键进行的退出执行的onDestroy()。
这个时候系统会自动在onSaveInstanceState()方法里面临时性的保存之前的界面状态或者变量信息。
方便在onCreate()的时候,从bundle里面直接取出来使用。但是毕竟是异常的状态,有些实体的信息或者fragment堆栈的状态恢复的时候就有可能错乱,导致显示效果出错或者crash。
//配置Activity的configChanges,防止页面被刷新
android:configChanges="orientation|screenSize|keyboardHidden|**fontScale**
//有一个尴尬的情况,如果我们改变的是字体样式,有点没辙
//究其原因就是onDestroy的时候,有些数据不太正确,因此在恢复的时候,可能导致crash,最果断直接方法来了,如果有保存的值,直接置为null
protected void onCreate(Bundle savedInstanceState) {
if (null != savedInstanceState)
savedInstanceState = null;
super.onCreate(savedInstanceState);
}
网友评论