Activity生命周期方法调用finish后的不同表现
2016-04-10 22:12
603 查看
今天宿舍一个哥们出去面试遇到了这个面试题:"在activity oncreate()调用finish()"生命周期是怎么样的?
我赶紧写了些demo,发现确实很有趣:
接下来看在生命周期不同回调里面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
执行完 onCreate()后,判断这时 activity 有没有finish ,没有就会接着执行 onStart(),否则会调用 destory()
执行完 onStart()后会执行 handleResumeActivity 函数,其中performResumeActivity 函数中:
会调用 onResume 如果此时finish,就不会执行finish(),会调用ActivityManagerNative.getDefault()
.finishActivity(token, Activity.RESULT_CANCELED, null);执行销毁
我赶紧写了些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);执行销毁
相关文章推荐
- ZOJ 3932 Handshakes
- 《Python核心编程》第十二章:模块
- 笔试题:腾讯基础研究方向
- MySql-使用触发器(trigger)
- import和@class的区别
- iOS NSRunloop 详解
- [实时渲染] 2.1 架构
- KMP匹配算法实现详解
- 004--栈、队列
- C++中引用和匿名对象的理解和本质剖析
- 面试题67 机器人的运动范围
- [Clean Code] Chapter 7: 异常处理
- 【步兵 c++】试用default_random_engine
- S5PV210中的定时器
- Linux中getopt()函数用法
- 几种软负载均衡策略分析
- What is the difference between a URI, a URL and a URN
- Android实现画板功能的多种实现方式
- jvm GC收集器与内存分配策略
- [实时渲染] 2. 图形渲染管线