最近细看Android docs,发现finish()在不同地方的生命周期有所区别。
在Android Studio中新建Android项目,分别重写onCreate、onResume、onPause、onStop、onDestroy方法,并打印相关信息。
- 先在onCreate中调用finish()方法关闭Activity
05-24 15:04:56.866 18315-18315/com.noddy.practiceproject I/DestroyActivity: DestroyActivity---onCreate() called!
05-24 15:04:57.506 18315-18315/com.noddy.practiceproject I/DestroyActivity: DestroyActivity---onDestroy() called!
- 再把onCreate中的finish()注释,在onResume中添加finish(),运行程序
05-24 15:12:40.656 24066-24066/com.noddy.practiceproject I/DestroyActivity: DestroyActivity---onCreate() called!
05-24 15:12:40.656 24066-24066/com.noddy.practiceproject I/DestroyActivity: DestroyActivity---onResume() called!
05-24 15:12:40.926 24066-24066/com.noddy.practiceproject I/DestroyActivity: DestroyActivity---onPause() called!
05-24 15:12:43.116 24066-24066/com.noddy.practiceproject I/DestroyActivity: DestroyActivity---onStop() called!
05-24 15:12:43.116 24066-24066/com.noddy.practiceproject I/DestroyActivity: DestroyActivity---onDestroy() called!
好显然,在onCreate中finish是跳过了onPause和onStop方法,直接执行onDestroy。
原因:开发文档中说到,Activity只有在Resumed、Paused、Stopped这三种状态下存在较长时间(即可以运行较长时间),Activity在其他状态下都是一闪而过。其中,在onResume中,Activity变为用户可见并且可以交互。因此,如果Activity不存在交互的概念(即在onCreate()中finish掉),就不会回调onPause、onStop等需要用户交互的方法。