一、Activity详解
作为四大组件Activity、服务service、广播接收者BoradCast Receive、内容提供者Content Provider之一的Activity是日常最常用的,最最基础的东西了,写写回顾一下,省得忘了尴尬
1. Activity的生命周期
这里重点理解每一个节点所代表的意义,这样才能在遇到特殊情况下可以快速反应
onCreate(): 首次创建的时候调用,后边的方法永远都接onStart(),这方法里边进行初始化的操作。
onStart(): 在Activity即将对用户可见之前调用,如果Activity转入前台后接onResume(),如果Activity转入后台后接onStop()。
onRestart(): 在Activity已停止并即将再次启动前调用;始终后接onStart()。
onResume(): 在Activity即将开始与用户进行交互之前调用,此时Activity处于Acticity堆栈的顶层,并具有用户输入的焦点;始终后接onPause();
onPause():在系统即将开始继续另一个Activity时调用,此方法通常用于确认对持久性数据的未保存更改,停止动画,以及其他可能消耗cpu的内容,他应该非常迅速的执行所需操作,因为它返回后,下一个Activity才能够执行;如果Activity返回前台,则后接onResume(),如果Activity转入对用户不可见状态则后接onStop()
onStop(): 在Activity对用户不再可见时调用。如果Activity被销毁、或另一个Activity(一个现有的Activity或新Activity)继续执行并将其覆盖,就可能发生这种情况。如果Activity回复与用户的交互,则后接onRestart(),如果Activity被销毁,则后接OnDestroy。
onDestroy:在Activity被销毁前调用,这时Activity将收到最后的调用。当Activity结束(Activity.finish()),或系统为节省空间暂时销毁Activity实例时,可能会调用它。可以通过isFinishing来区分状态
不同场景下的Activity的生命周期变化
启动Activity,onCreate()—onStart()—onResume(),Activity进入可见状态
Activity退居后台: 当前Activity转到新的Activity界面或按Home键回到主屏: onPause()—onStop(),进入停滞状态。
Activity返回前台: onRestart()—>onStart()—>onResume(),再次回到运行状态。
Activity退居后台,且系统内存不足, 系统会杀死这个后台状态的Activity,若再次回到这个Activity,则会 走onCreate()–>onStart()—>onResume()
锁定屏与解锁屏幕 只会调用onPause(),而不会调用onStop方法,开屏后则调用onResume()
2. Activity的启动模式
Activity的启动模式包含了四种
- standard(标准模式)—亦是默认的启动模式
- singleTop(栈顶复用模式)
- singleTask(栈内复用模式)
- singleInstance(单例模式)
1.Activity综述:
Activity的管理是采用 任务栈 的形式
任务栈采用 先进后出 的栈结构
每按一次back就从栈中移出一个Activity实例
2.具体介绍
2.1:standard标准模式
每次启动一次Activity就会在栈顶加入该Activity的实例
Activity A调用StartActivity(A.this , B.class),则B Activity在A Activity上边,B Activity在顶部,B Activity再次开启A Activity,则又会创新新的A Activity并置于栈顶,栈中存在两个A Activity的实例
2.2:singleTop栈顶复用模式
需要创建的Activity处于栈顶时,那么此Activity的实例不会创建,而是重用栈顶的实例(调用实例的OnNewInstance,不调用onCreate和onStart)
3.singleTask栈内复用模式
当要启动的Activity的实例存在于栈中的时候,系统将此实例从栈中移至栈顶部,再进行复用
4.singleInstance单例模式
singletask的加强版,Activity实例被放置于单独的栈中,当要开启的Activity存在于某个栈中时,会进行复用