设为首页 加入收藏

TOP

Activity生命周期方法调用finish后的不同表现
2019-09-03 02:40:10 】 浏览:268
Tags:Activity 生命 周期 方法 调用 finish 后的 不同 表现

文章转载自: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/

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇企业Shell面试题及企业运维实战案.. 下一篇RxJS 实现摩斯密码(Morse) 【内附..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目