为何调用stringResource(2131623990)崩溃,而R.string.error却正常?
问题原因解析
资源ID并非固定不变:Android中的资源数字ID(比如你提到的
2131623990)不是永久固定的。每次编译项目时,构建工具会重新生成R类,只要项目里增删资源、调整资源排序,这个数字ID就可能对应其他资源,甚至直接失效。硬写这个数字调用stringResource,下次编译后大概率找不到对应资源,直接引发崩溃。R.string.error是动态关联的正确引用:R.string.error是编译时生成的静态常量,每次编译它都会自动指向当前正确的资源ID。不管资源ID怎么变化,用这个引用调用stringResource都能精准定位到目标字符串资源,所以不会出现问题。编译期校验的差异:Jetpack Compose的
stringResource在接收R.string.xxx这类引用时,编译阶段就会校验该ID是否对应有效的字符串资源;但直接传数字ID的话,编译期无法做这个校验,运行时一旦ID无效,就会抛出Resources.NotFoundException导致崩溃。
内容的提问来源于stack exchange,提问作者Saif Ur Rehman
相关产品推荐
相关产品推荐

