这个代码(jar文件)是由其他人编写的,它不是很干净,但它在其他(较旧的)Android版本上运行正常但在Lollipop上有一个问题,NullPointerException仅在调试模式下抛出,否则测试应用程序只是挂起。这种行为只在Lollipop上看到。
我可以使用String重现该问题。
public class MyPlugin implements Runnable{
public void run(){
init();
// Initialize done.
}
// Internally triggered when plug-in has to be stopped.
private void stopPlugin(String message){
try
{
Log.w("MyPlugin", "Lets make exception happen");
String test=null;
int value = test.length();
Log.w("MyPlugin", "String Length " + value);
}
catch(Exception e)
{
Log.w("MyPlugin", "The exception was handled");
}
}
}
在旧版本的android中“test.length();”被调用,抛出NullPointerException但在Lollipop上它不会触发异常。但是如果我进入调试模式,就会抛出异常。
知道为什么会这样吗?
答案 0 :(得分:0)
它似乎是Java优化的结果。由于长度未分配给变量,因此优化程序将语句test.length()删除为冗余。
而只是做
Log.w("MyPlugin", "Lets make exception happen");
throw new NullPointerException();
这肯定有用。
答案 1 :(得分:0)
5.02中的调试器下存在异常处理的已知问题。 android-review.googlesource.com/#/c/123720解决了这个问题。