android finish 判断当前_Activity生命周期方法调用finish后的不同表现

今天宿舍一个哥们出去面试遇到了这个面试题:"在activity oncreate()调用finish()"生命周期是怎么样的?

我赶紧写了些demo,发现确实很有趣:

packagecom.example.okhttpdemo;importandroid.app.Activity;importandroid.os.Bundle;importandroid.util.Log;public class TestActivity extendsActivity {

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

finish();

Log.i("TestActivity", "onCreate");

}

@Overrideprotected voidonDestroy() {super.onDestroy();

Log.i("TestActivity", "onDestroy");

}

@Overrideprotected voidonPause() {super.onPause();

Log.i("TestActivity", "onPause");

}

@Overrideprotected voidonRestart() {super.onRestart();

Log.i("TestActivity", "onRestart");

}

@Overrideprotected voidonResume() {super.onResume();

Log.i("TestActivity", "onResume");

}

@Overrideprotected voidonStart() {super.onStart();

Log.i("TestActivity", "onStart");

}

@Overrideprotected voidonStop() {super.onStop();

Log.i("TestActivity", "onStop");

}

}

接下来看在生命周期不同回调里面finish()调用后的日志:

1,oncreate():经历onStart(),onResume(),onPause(),onStop()方法

655cc9684f01e6dcfc0c5223313fc0d8.png

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

83f704c8c1004b63a17d37e887bc0041.png

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

95033821e834148f6d7d93e8ab916b77.png

4,onpause()

ee9158c43710ba3c5a7534676c23c5d6.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值