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     }    

 

 

 

posted @ 2013-06-23 17:04  s1rius  阅读(478)  评论(0)    收藏  举报