文章转载自:http://www.pythonheidong.com/blog/article/2866/
今天宿舍一个哥们出去面试遇到了这个面试题:"在activity oncreate()调用finish()"生命周期是怎么样的?
我赶紧写了些demo,发现确实很有趣:
- package com.example.okhttpdemo;
- import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;
- public class TestActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- finish();
- Log.i("TestActivity", "onCreate");
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- Log.i("TestActivity", "onDestroy");
- }
- @Override
- protected void onPause() {
- super.onPause();
- Log.i("TestActivity", "onPause");
- }
- @Override
- protected void onRestart() {
- super.onRestart();
- Log.i("TestActivity", "onRestart");
- }
- @Override
- protected void onResume() {
- super.onResume();
- Log.i("TestActivity", "onResume");
- }
- @Override
- protected void onStart() {
- super.onStart();
- Log.i("TestActivity", "onStart");
- }
- @Override
- protected void onStop() {
- super.onStop();
- Log.i("TestActivity", "onStop");
- }
- }
接下来看在生命周期不同回调里面finish()调用后的日志:
1,oncreate():经历onStart(),onResume(),onPause(),onStop()方法

2,onstart()经历onResume(),onPause()方法

3,onresume() 经历onStart(),onResume(),onPause(),onStop()方法

4,onpause()

5,onstop()结果同上
6,onDestory()结果同上
那么问什么是这个样子的呢?(2016年4月24日00:01:37更新)
如下是github上面对于这个问题的探讨:
https://github.com/android-cn/android-discuss/issues/430
- mInstrumentation.callActivityOnCreate(activity, r.state) 函数中会判断:
- if (!r.activity.mFinished) {
- activity.performStart();
- r.stopped = false;
- }
执行完 onCreate()后,判断这时 activity 有没有finish ,没有就会接着执行 onStart(),否则会调用 destory()
执行完 onStart()后会执行 handleResumeActivity 函数,其中performResumeActivity 函数中:
- if (r != null && !r.activity.mFinished) {
- r.activity.performResume();
- }
会调用 onResume 如果此时finish,就不会执行finish(),会调用ActivityManagerNative.getDefault()
.finishActivity(token, Activity.RESULT_CANCELED, null);执行销毁
文章转载自:http://www.pythonheidong.com/blog/article/2866/