• 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);执行销毁

  • 相关阅读:
    由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。
    中晟银泰国际中心酒店式公寓介绍 业主交流QQ群:319843248
    社保关系转移
    在中国,大数据的有效商业模式在哪里?
    指点传媒:在手机上做“精准营销”
    说说大型高并发高负载网站的系统架构【转】
    BI的相关问题[转]
    python 中有趣的库tqdm
    python之字符串操作方法
    比Screen更好用的神器:tmux
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/5375775.html
Copyright © 2020-2023  润新知