四大组件浅析(一)——Activity的回顾

来源:互联网 发布:淘宝一分钱大学生 编辑:程序博客网 时间:2024/06/05 17:06

一、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存在于某个栈中时,会进行复用

原创粉丝点击