最近准备面试,想整理一些比较基础的问题,方便面试前可以快速的浏览,可以用比较简洁的方式,让面试官可以清楚地明白我想表达的内容。
生命周期 ( Activity Lifecycle )
首先如果是纸笔考试的话,我会默写下这一张图,但这张图很深硬,而且并不好理解,也不好记忆。
如果是谈话的方式
首先会介绍 onCreate(),启动Activity的第一个方法,主要是初始化资料,以及指定画面资源 setContentView() 呈现目前的 Layout.xml,和包含一些需要初始化的组件。
接着 OnStart(),适合执行画面组件的内容。比方说当 Activity 沉到背景后,如果把设定的内容放在 onCreate(),当唤醒后会跳过 onCreate(),直接执行 OnStart()。比如记忆账号、密码 EditText。
onResume(),如对 Button 或 EditText 做点击的动作,此时会获得焦点,进行我们设计好的动作,比如输入或确认的动作,简单来说是 Activity 与使用者互动。
onPause() : 组件暂停,暂停执行中的工作和线程。onPause() 执行完后,通常会马上再执行 onStop()部分,但有例外,如果是碰到Dialog,没有完全遮盖住屏幕,那么便会在 onPause()停止,操作完 Dialog后,再按照原本的生命周期来运行。
onStop() : 停止,停止执行中的工作和线程,画面完全消失,但Activity还留在后台。
onDestory() : 销毁Activity,清除所有建立的资源,生命周期结束,包含GC回收动作。
如果说到这边面试官没有打断,甚至示意让继续说下去,那么我会告诉他几个个常见的动作。
- 点选主画面按钮
onPause() > onStop() - 开启相机或另一个 Activity 或进入待命状态
onPause() > onStop(),当 Activity 结束或屏幕结束待命 onRestart() > onStart() > onResume() - A Activity 切换至 B Activity
A onPause() > B onCreate() > B onStart() > B onResume() > A onStop() - 关闭 B Activity
B onPause() > A onRestart() > A onStart() > A onResume > B onStop() > B onDestory()
*在画面转向时,生命周期会重新执行。我猜面试官如果没有当下问这个问题,我不会说死,当他之后再问也可以比较从容地回答这个问题。
如果要避免重新执行生命周期
可至 AndroidManifest.xml 设定 android:configChages=”oriention|screensize”;
这样就只会执行onConfigurationChanged()。
补充 :
- onCreate只能执行一次,onStart()能执行多次
- onStop() 中 Activty 还没有被销毁,还存在内存中,可以透过切换Activity回复。onDestory() 是已经摧毁。
- 不要再 onStart()执行,判断屏幕方向代码,否则会有无限循环问题。
这篇文章只是留下一些纪录,如果有甚么问题欢迎各位再提出来