因为编译时验证Android失败而拒绝类

XGo*_*het 9 android synchronized-block

我的一个应用程序在启动时突然失败,并显示以下错误消息:

java.lang.VerifyError:拒绝类com.sample.BufferManagerImpl,因为编译时验证失败('com.sample.BufferManagerImpl'的声明出现在/data/app/com.sample.myapp-1/base.apk中)

它仅在使用ART虚拟机的设备上失败,但在Dalvik上没有

XGo*_*het 8

问题是由于在synchronized块内部有一个try-catch块,例如:

try {
    synchronized (mLock) {
        updateState();
    }
} catch (IllegalStateException e) {
}
Run Code Online (Sandbox Code Playgroud)

显然这不是一个好习惯,但是一旦我改变它就会这样:

synchronized(mLock) {
    try {
        updateState();
    } catch (IllegalStateException e) {
    }
}
Run Code Online (Sandbox Code Playgroud)