Activity是Android提供给开发者的四大组件之一,主要作用是展示视图、与用户进行交互。当用户初次启动Activity时、当用户执行跳转到另外一个Activity或切换到其他应用时,Android都会调用Activity的一系列生命周期方法,开发者可以在相应的生命周期方法处理一些必要的操作。

生命周期

上图就是Activity很经典的生命周期图示,我们可以把Activity分成三组状态

  • onCreate和onDestroy
  • onStart、onRestart和onStop
  • onResume和onPause

Activity只能在其中三种状态之下存在很长的一段时间:

  • onResume(),此时Activity在前台并且可以和用户交互
  • onPasue(),此时Activity处于暂停状态,Activity被在前台中处于半透明状态或者未覆盖整个屏幕的另一个Activity部分阻挡
  • onStop(),此时Activity处于停止状态,Activity完全隐藏对用户不可见

其他几个状态都是短暂的状态,系统会调用下一个生命周期方法来快速转换到下一个状态

onCreate和onDestroy

当用户点击应用图标后,系统会调用app中AndroidManifest.xml文件中被声明为”launcher” (or “main”) activity中的onCreate()方法。这个Activity被用来当作程序的主要进入点。

onCreate()方法是Activity生命周期第一个回调函数,此时我们可以在onCreate()方法中初始化一些UI组件,以及实例化一些成员变量,尽量少在onCreate()方法中做太多太多事情,避免Activity启动很久后都还看不到界面,一旦onCreate操作完成,系统会马上调用onStart()方法

Activity生命周期最后一个回调函数是onDestroy(),当Activity处在后台并且系统内存不足或者我们主动调用finish()方法关闭Activity时,系统会调用onDestroy()方法(调用finish()方法关闭Activity时,系统直接调用onDestroy()方法,而不会经过onPause和onStop)。我们需要在onDestroy()方法中释放掉那些可能会造成内存泄漏的资源

onResume和onPause

当一个半透明的Activty阻塞Activty时(此时Activty不可交互),系统会调用onPause()方法并且这个Activty会停留在Paused 状态,方法中可以停止不应该在暂停过程中执行的操作,如暂停视频播放

如果用户在这个Activty还是在Paused 状态时回到这个Activty,系统则会调用它的onResume(),系统每次调用这个方法时,Activty都处于前台,包括第一次创建的时候。所以,应该实现onResume()来初始化那些在onPause方法里面释放掉的组件,如恢复用户的视频播放进度并开始播放

onStart、onRestart和onStop

当用户跳转到下一个Activity或者是直接按Home键返回主界面时,此时Activity处于对用户不可见,系统会调用onStop方法并且Activty会停留在onStop状态(不管什么原因导致Activity停止,系统总是会在onStop()之前调用onPause()方法),当系统内存不足时,系统就会调用onDestroy(),然后摧毁掉这个Activity的实例

当Activity从Stop状态回到前台时,它会调用onRestart()。系统再调用onStart()方法,onStart()方法会在每次Activity可见时都会被调用。onRestart()方法则是只在Activity从stop状态恢复时才会被调用

启动模式

Android提供了四种Activity的启动模式:Standard、SingleTop、SingleTask、SingleInstance,其中Standard是Activity默认的启动模式。正确的理解并运用Activity的启动模式能够节省系统资源

Standard

这种启动模式是Activity的默认启动模式,每当我们开启一个新的Activity页面时,系统都会新建一个Activity实例对象并将其放在Task栈的栈顶,然后开启上面说的Activity的生命周期流程过程,onCreate->onStart->onResume

SingleTop

设置该模式后,每当我们开启一个SingleTop模式启动的Activity与当前Task栈中最顶部的Activity一样时,系统不会重新创建一个Activity实例,使用SingleTop能够很好解决重复创建栈顶活动的问题

SingleTask

设置SingleTask模式后,每次启动该模式的Activity时,系统首先会在Task栈中检查是否存在该活动的实例,如果存在的话就直接使用该实例,并把Task栈中这个Activity实例之上的所有Activity统统出栈,如果没有发现该活动的实例则会创建一个新的放在栈顶。SingleTask启动模式能够确保Task栈中只存在一个Activity实例

SingleInstance

这个启动模式相对难理解一点,设置为SingleInstance模式的Activity会启用一个新的Task栈来管理这个活动,并且这个Task中只存在这一个Activity。该模式主要可以应用在当前程序中有Activity是允许其他程序调用的,这时我们就可以指定该活动为SingleInstance模式,这样,不管哪个程序来访问这个Activity,都共用同一个Task栈

更多相关文章

  1. Android开发之OkHttp3.4.x
  2. android中数据库创建操作的模式
  3. Android入门进阶教程(1)-android扫盲
  4. Android(安卓)之 Fragment
  5. Android/Java每日积累[2/27-3/3]
  6. android图片叠加方法
  7. Android中三种主要的XML解析方法
  8. Android(安卓)小项目之--Mini音乐播放器【简单版】(附源码)
  9. OSG for Android新手教程系列(四)——JNI与NDK的使用

随机推荐

  1. android Fragment 学习资料推荐
  2. Android studio 启动出现错误AAPT: error
  3. Android 复习笔记之图解BroadcastReceive
  4. android aidl进程间通信
  5. android 获取应用程序占用的内存大小
  6. Android 杂记
  7. Java建造者模式,Android建造者模式的Alert
  8. Android中的ClassLoader与dex文件加密实
  9. Android高手进阶教程(十七)之---Android
  10. android 跳转到应用通知设置界面