zoukankan      html  css  js  c++  java
  • Activity生命周期方法调用finish后的不同表现

    今天宿舍一个哥们出去面试遇到了这个面试题:"在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);执行销毁

  • 相关阅读:
    [POJ 1050]To the Max
    P1678 烦恼的高考志愿
    P1873 砍树
    P1102 A-B 数对
    P6771 [USACO05MAR]Space Elevator 太空电梯
    P2347 砝码称重
    P1832 A+B Problem(再升级)
    P1679 神奇的四次方数
    P1877 [HAOI2012]音量调节
    P1049 装箱问题
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/5375775.html
Copyright © 2011-2022 走看看