通过实现回调方法来管理Activity的生命周期是开发强壮和灵活应用程序的关键。Activity的生命周期直接受到与之相关的Activity、任务和回退堆栈的影响。
Activity存在基本的三种状态:
恢复态(Resumed)、
这种状态下,Activity在屏幕的前端,并有有用户焦点(这种状态有时也叫“运行态”)
暂停态(Paused)
这种状态下的Activity,另一个Activity在这个Activity的前端,并且拥有焦点,但是这个Activity依然可见,也就是说,在这个Activity之上的另一个Activity是可见的,并且那个Activity是部分透明或没有覆盖整个屏幕。一个暂停态的Activity是完全活动着的(这个Activity对象被保留在内存中,它保持着所有的状态和成员信息,并且依然依附于窗口管理器),但是在内存极低的情况下,能够被系统清除。
终止态(Stopped)
这种状态下的Activity完全被另一个Activity屏蔽(这个Activity保持在后台)。被终止的Activity也依然存活着(这个Activity对象被保留在内存中,他保持所有的状态和成员信息,但是不依附于窗口管理器)。而且,对用户它不再可见,并且在任何需要内存的时候,它都可以被系统清除。
如果Activity处于暂停或终止态,系统既可以通过询问的方式用finish()方法把它从内存中删除,也可以简单的杀死这个进程。但是当Activity被重新打开时,它必须重新创建所有的内容。
实现生命周期的回调
当Activity在之上描述的不同状态间转换时,通过各种回调方法获取通知。所有的回调方法都可以重写,用于处理Activity的状态改变时对应的工作。以下的代码骨架包含了Activity的每个基本生命周期的方法:
在你实现这些生命周期方法时,做任何工作之前,都必须像上面的例子那样调用父类的实现,综合而言,这些方法定义了Activity的完整的生命周期。通过实现这些方法,你能够在Activity的生命周期中循环监视这三种状态:
Activity的整个生命时发生在调用onCreate()方法和调用onDestroy()方法之间。你的Activity应该在onCreate()方法中执行全局状态创建工作,在onDestroy()方法中释放所有的保留的资源。例如,如果你的Activity有一个运行在后台,从网络上下载数据的线程,可以在onCreate()方法中创建这个线程,并且在onDestroy()方法中终止这个线程。
Activity可见生命时发生在调用onStart()方法和调用onStop()方法之间。在这期间,用户能够在屏幕上看到这个Activity,并且可以和它交互。例如,当一个新的Activity启动时,onStop()方法被调用,并且这个Activity不再可见。这两个方法之间,你能保持显示给用户的Activity所需要的资源。例如,你能够在onStart()方法中注册一个广播接收器来监视你的UI的改变,并且在onStop()方法中解除注册(用户不能再看到Activity显示的内容)。在Activity整个生命期间,当Activity在显示和隐藏之间切换时,系统可以多次调用onStart()和OnStop()方法。
Activity的前台生命时发生在调用onResume()方法和onPause()方法之间,在这期间,这个Activity在屏幕上所有可见的其他Activity之前,并且有用户输入焦点。Activity能够在前台频繁的切入、切出---例如,当设备休眠或对话框显示时,onPause()方法被调用。因为这个状态能够经常的转换,因此在这两个方法中代码应该尽量轻量级,以避免过慢的切换而让用户等待。
图1说明了这些循环和状态之间转换可能的路径。矩形代表了Activity在状态间切换是需要实现的执行操作的回调方法。
图1 Activity生命周期
在表1中列出了与上图相同的生命周期回调方法,更详细的介绍了每个回调方法,并且定位到Activity整个生命周期的每个方法,包括系统是否能够在会回调方法执行完成之后杀死这个Activity。
表1 Activity生命周期的回调方法概要:
方法
|
描述
|
执行之后能够杀死吗?
|
下一个回调
|
onCreate()
|
Activity被首次创建时调用这个方法()。你应该在这个方法中创建所有的全局资源,如视图、把数据绑定到列表等等。如果这个状态被捕获,就会给这个方法传递一个包含Activity前一个状态的Bundle对象。(可以查看稍后的保存Activity状态)。
跟随其后的总是onStart()方法
|
No
|
onStart()
|
onRestart()
|
在Activity被终止之后,重启之前调用这个方法
跟随其后的总是onStart()方法
|
No
|
onStart()
|
onStart()
|
在Activity显示给用户之前调用这个方法,如果Activity要显示在前台,接下来要调用onResume()方法,如果被隐藏接下来要调用onStop()方法。
|
No
|
onResume()
或
onStop()
|
onResume()
|
只在Activity和用户交互之前调用这个方法。这时,Activity在Activity堆栈的顶部,能够接受用户的输入。
跟随其后的总是onStart()方法
|
No
|
onPause()
|
onPause()
|
当系统开始恢复另外一个Activity是调用这个方法。通常,用这个方法来提交那些未保存的改变使数据持久化,终止动画和其他的可能消耗CPU的操作等等。无论怎样,它都应该被很快的调用,因为接下来直到Activity返回它才会被恢复。
接下来再Activity返回到前台时,要调用onResume()方法,在隐藏的时候要调用onStop()方法
|
Yes
|
onResume()
或
onStop()
|
onStop()
|
当Activity不再显示给用户时调用这个方法,因为Activity被销毁或者因为另一个Activity(既可以是既存的也可以是新创建的)被恢复并且覆盖它,这个方法就被调用了。
如果Activity从后台返回前台与用户交互,就调用onRestart()方法,如果Activity被清除就调用onDestroy()方法
|
Yes
|
onRestart()
或
onDestroy()
|
onDestroy()
|
在Activity被销毁之前调用这个方法。这是Activity收到的最后的调用。既可以因为finish()方法的调用而调用,也可以因为系统临时销毁了这个Activity实例来释放空间而调用。你能够使用isFinished()方法来区分这两种场景。
|
Yes
|
Nothing
|
“执行之后能够杀死吗?”列指示了系统能否在回调方法执行之后不执行Activity其他代码行的任何时候可能杀死拥有这个Activity的进程。有三个方法标记了“Yes”:(onPause(),onStop()和onDestroy())。在这三个方法中,因为onPause()是最先被调用的,所以Activity一旦被创建,在进程被杀死前能够保证被调用的最后的方法---如果系统在紧急的情况下必须恢复内存,那么onStop()和onDestroy()方法就可能不被调用了。因此,你应该使用onPause()方法来写关键的持久化数据代码用于保存数据。但是,你应该选择在onPause()期间什么信息是必须保留的,因为在这个方法中的任何处理都会锁定系统向下一个Activity转换,如果处理比较慢会影响流畅的用户体验。
“执行之后能够杀死吗?”列中标记了“No”的列回调方法保证了拥有Activity的进程在这些方法被调用后的瞬间被杀死。因此,Activity在从onPause()方法返回到onResume()方法之前是可杀死的。直到onPause()方法被再次调用并返回的时候进程才是可杀死的。
注:Activity不通过表1中定义的技术型可杀死的方法依然可被系统杀死---但这只在没有资源的极端情况情况下才发生。关于Activity可被杀死的时机将在Processes and Threading(进程和线程)的文档做更多的讨论。
注:本人转载系个人觉得翻译的很好,值得收藏,且自己回头看着方便。
如有兴趣请访问作者官方博客http://blog.csdn.net/FireOfStar
分享到:
相关推荐
Android官方activity-lifecycle生命周期例子,参考...http://developer.android.com/training/basics/activity-lifecycle/index.html 方便了解Activity生命周期,提供了非常形象的说明。生动讲解。可以结合官网查看。
Android Activity 生命周期 Android Activity 生命周期是指 Activity 从创建到销毁的整个过程,该过程中会经历多个状态变化,每个状态变化都会触发相应的回调方法。理解 Activity 生命周期是 Android 开发的基础。 ...
### 一、Android Activity生命周期介绍 #### 1. onCreate() 当Activity首次创建时被调用,这是初始化Activity的最佳时机。在该方法中通常会执行一些初始化操作,比如设置布局文件、初始化UI组件等。 示例: ``` @...
这篇博客文章“Android开发 - Activity生命周期”(链接:https://zzqrj.iteye.com/blog/1124449)可能详细讲解了Activity在不同状态之间的转换及其对程序行为的影响。 Activity生命周期主要涉及以下几个关键状态:...
本示例项目“Android activity生命周期示例”旨在帮助开发者深入理解Activity的生命周期及其各个阶段,这对于优化用户体验和资源管理至关重要。 Activity的生命周期包括以下几个主要状态: 1. **创建(Created)**...
Android Studio提供了多种工具帮助开发者调试Activity生命周期。例如: 1. **Android Profiler**:可以实时监控Activity的生命周期状态变化,同时分析内存、CPU和网络使用情况。 2. **Logcat**:通过打印日志,可以...
1. Android Activity生命周期,特别是`onCreate()`方法的实现。 2. BroadcastReceiver的使用,包括如何创建、注册和接收广播。 3. 如何通过BroadcastReceiver来监听和响应退出消息,结束Activity。 4. 动态注册...
总之,深入理解Activity生命周期和其背后的源码逻辑,对于编写高效、响应迅速且用户体验优秀的Android应用至关重要。开发者应熟练掌握这些知识点,以便在设计和调试应用时能得心应手。通过实践和分析ActivityDemo,...
在Android开发过程中,理解Activity的生命周期对于管理界面状态、处理用户交互以及响应系统事件至关重要。本文将详细解析从一个Activity(Activity1)跳转到另一个Activity(Activity2),然后再返回到原Activity...
6. **销毁(Destroyed)**: 当Activity不再需要,或者系统资源紧张时,系统会调用`onDestroy()`,这是Activity生命周期的最后一个阶段。开发者可以在此释放资源,执行清理工作。 在Activity的生命周期中,还有一些...
当我们谈论“android生命周期管理:启动一个Activity”,我们关注的是如何启动Activity以及在生命周期中的关键回调函数。 1. 了解生命周期回调函数 Activity的生命周期由一系列的回调方法组成,包括onCreate(), ...
Android 生命周期管理:重置一个 Activity Android 生命周期管理是 Android 应用程序开发中一个非常重要的概念,涉及到 Activity 的生命周期管理,包括 Activity 的创建、启动、停止、销毁等过程。在 Android 中,...
Android Activity生命周期演示源码,从第一个Activity到第二个Activity,Android Activity形象的说就是一个容器,在里面放置各种控件(按钮,文本,复选框等),就形成了软件的界面~ Activity是可见的。
有助于深入了解Android Activity生命周期的测试代码,可以结合博客http://blog.csdn.net/freetangxiaoying/article/details/17167819领悟。
Activity生命周期的理解和管理对于编写高效、响应式的Android应用至关重要。本实验旨在深入探索Activity的生命周期,并通过实践来理解各个阶段的工作流程以及它们之间的转换。 首先,我们来看一下Activity的生命...
1. **初始状态**:当Activity首次被创建时,会经历`onCreate()`方法,这是Activity生命周期的第一个回调,用于进行初始化工作,如设置布局、数据绑定等。 2. **启动状态**:`onStart()`方法紧接着`onCreate()`,...
### Android启动及Activity生命周期分析 在Android开发过程中,理解应用程序如何启动及Activity的生命周期是非常重要的。这不仅有助于我们更好地管理程序的状态,还能帮助我们在遇到内存泄漏等问题时进行快速定位和...
Android生命周期演示展示android活动生命周期的android应用演示。 有两个活动, MainActivity.java和secondActivity.java 。 使用logcat和log类,当两个活动中的每个回调都被调用时,此应用向用户显示。 这两个活动...
日志追踪(完成以下六步、明白android的四种状态的生命周期和相互切换): 1、启动app、查看控制台输出,发现依次触发onCreate、onStart、onResume这三个方法 2、点击按钮(弹窗风格的Activity),控制台输出onPause...