异常问题汇总

102 阅读1分钟
问题一:有root权限的手机,如果使用adb push命令,将文件push到某个APP的externalFiles目录下,那么这个文件是root权限的,app是无法从自己的files目录下读取到这个文件内容的

解决办法:将文件放到assets目录下,拷贝到App的externalFiles目录下

问题二:使用sealed定义的class类,内部带有单例的对象,如果提前加载了res文件,那么在切换系统语言的时候,对应res不生效,不会跟着变化。

例如下面的代码:


sealed class App(  
    val appType: Int,  
    val pkgName: String = "",  
    val activityName: String = "",  
    val pkgTag: String = "",  
    var params: String = "",  
) {  
    object AppAccount : App(  
        WIN_TYPE_ACCOUNT,  
        PACKAGE_NAME_ACCOUNT,  
        "",  
        APP_ACCOUNT,  
        res(R.string.account)  
    )  

    object AppStore : App(  
        WIN_TYPE_APP_STORE,  
        PACKAGE_NAME_STORE,  
        "",  
        APP_STORE,  
        res(R.string.app_store)  
    )  
}
// 在实例化的时候就会加载对应的res文件
private val res = { resId: Int -> KornApp.getInstance().getString(resId)}

解决方法: 在使用res字符串对应的代码那里,重新获取下资源文件,这样变更在语言变化后,及时获取到对应语言下的字符串了

Log.d(TAG, "before startApp: app.params is ${app.params}")  
val resId = getResId(app.appType)  
app.params = KornApp.getInstance().getString(resId)