经过一些调试,我在现有的生产代码中发现了以下内容:
public class SomeTTS {
private static TTSSpeechListener mSpeechListener;
private static TTSBreakListener mBreakListener;
// more static (!!!) listeners
private String mPath;
public TTS(String path, TTSSpeechListener speechListener)
throws RuntimeException {
// ...
mSpeechListener = speechListener;
mBreakListener = null;
// more listeners set to null
// ...
}
// called from NATIVE code that I cannot change
private static void onReceiveSpeechData(byte[] samples) {
mSpeechListener.onSpeechData(samples);
}
// ...
}
该类是原生库(Android、NDK、JNI)的包装器。我无权访问本机库源。(当然,您看到了问题:在我创建 的第二个实例后SomeTTS
,第一个实例不再工作。)我有点震惊:除了小学生之外,我不会指望任何人会出现这样的错误。可能他们正在使用童工。或者,更有可能的是,有人无法向他的经理解释演示代码和生产代码之间的区别。
无论如何,我必须让它工作。我有一些想法,但我目前能提出的建议远非完美。任何想法如何重构它?