在Lollipop上没有抛出NullPointerException

时间:2015-01-20 05:17:27

标签: java android nullpointerexception android-5.0-lollipop

这个代码(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上它不会触发异常。但是如果我进入调试模式,就会抛出异常。

知道为什么会这样吗?

2 个答案:

答案 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解决了这个问题。