Activity创建过程中的异常处理
今天在Activity的创建过程中碰到运行时的异常需要处理,空指针异常(NullPointException),示意如下
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_main); 5 Object obj = null; 6 if(obj==null){ 7 finish(); 8 } 9 System.out.println(obj.hashCode()); 10 }
在OnCreate方法中调用finish方法后,没有break,依然继续向下执行了.不理解finish的实现机制,于是去google了下
在不同的生命周期中执行finish方法,Activity执行的生命周期中的方法是不同的:
不同生命周期调用finish方法产生的影响:via http://blog.csdn.net/wcnmcsnm/article/details/8963424
1. onCreate 时调用finish 执行 onCreate--->onDestory 2. onStart 时调用finish 执行 onCreate--->onStart--->onStop--->onDestory 3. onResume 时调用finish 执行 onCreate--->onStart--->onResume--->onPause--->onStop--->onDestory 4. onPause 时调用finish onCreate--->onStart--->onResume--->onPause--->onStop--->onDestory 5. onStop 时调用finish onCreate--->onStart--->onResume--->onPause--->onStop--->onDestory 6. onDestory时调用finish onCreate--->onStart--->onResume--->onPause--->onStop--->onDestory
也就是说你在某个生命周期中调用finish方法时,必须保证执行finish方法后调用的这些生命周期的方法都能正常运行,不会抛出运行时异常
之前的小例子中的方法进行如下改动就能正常的结束掉Activity了
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_main); 5 Object obj = null; 6 if(obj!=null){ 7 System.out.println(obj.hashCode()); 8 }else{ 9 finish(); 10 } 11 }

浙公网安备 33010602011771号