当 Proguard 优化我的应用程序时,它会将所有调用Object#wait()
都删除。
这样每个应该被动等待(直到通知)的线程现在都在主动等待(100% CPU 使用率)。
当优化关闭时-dontoptimize
一切正常。
我是否需要优化以删除某些方法-assumenosideeffects
,我正在寻找问题所在。
是否可以保留所有Object#wait()
要优化(删除)的调用?
还有其他解决方案吗?
编辑1:例如此代码:
@Override
public void run() {
isRunning = true;
try {
while (isRunning) {
if (parent.isActivate) {
parent.updateDriveButtons();
synchronized (this) {
wait(1000);
}
}
else {
synchronized (this) {
// Wait for that the page is activated.
Utils.wait(this);
}
}
}
}
catch (Throwable e) {
e.printStackTrace();
}
finally {
isRunning = false;
}
}
正在被此代码替换(在反编译优化代码后):
wait()
已被删除,只有同步可见monitorenter;
...monitorexit;
public final void run()
{
this.isRunning = true;
try {
while (this.isRunning) {
if (this.parent.isShowing()) {
...
monitorenter;
monitorexit; continue;
}
monitorenter;
monitorexit;
}return;
} catch (Throwable localThrowable) {
Object Ljava/lang/Object;;
return;
} finally {
this.isRunning = false; } throw localObject1;
}