应用程序异常退出即通常我们口头上所说的“闪退”,是困扰开发者的重要问题。当出现这种问题时没有任何提示说明,往往弄得开发者一头雾水,心惊胆战。
实际上,闪退情况的出现通常是由于Java代码出现了异常(Exception),但是没有通过try-catch语句进行捕获和处理,结果就是被运行时系统的默认异常处理程序捕获了这个异常。然后,这个异常处理程序非常“懒政”,所有异常到了它这里,处理办法就是打印异常发生处的堆栈轨迹并且终止程序,因此,可以通过查看被打印的堆栈轨迹来定位问题出现的位置。
这里构建一个简单的空指针异常(NullPointerException),代码如下:
在这个代码中,testString变量虽然被声明但是没有被实例化,而在随后的代码中却调用了testString的trim()方法。此时,由于testString变量的指针为空,因此会抛出NullPointerException异常。当运行到这段代码时,程序会立刻退出,出现“闪退”现象。
不过,这个时候不要慌张,可以打开DevEco Studio的Run工具窗体,在这里打印NullPointerException出现时的堆栈轨迹,如图2-48所示。
图2-48 出现异常的堆栈记录
此时,通过单击堆栈记录中的MainAbilitySlice.java:76超链接(根据出现位置的不同而不同)即可在代码编辑窗口中定位异常出现的位置。开发者可以根据具体问题来排查和解决异常。
例如,如果对上述代码加入try-catch语句,则抛出的异常会立刻被捕获并进行处理,这样应用程序就不会出现闪退现象了,代码如下:
因此,良好的编程习惯是非常重要的,在有可能出现异常的代码中加入try-catch语句,以防止在应用程序发布后出现严重Bug给用户带来不良体验。