Activity生命周期详解
Activity生命周期解说

Activity生命周期解说二、事件方法链2.1进入ActivityonCreate -> onStart -> onResume2.2BACK键onPause->onStop->onDestroy2.3HOME键Home键退出:onPause->onStopHome键回来:onRestart -> onStart->onResume2.4休眠/恢复休眠:onPause恢复:onResume2.5旋转屏幕未设置android:configChanges:onPause -> onStop -> onDestory -> onCreate -> onStart -> onResume设置了android:configChanges="orientation|keyboardHidden":不会触发生命周期方法,参见文章这里。
2.6来电来电,显示来电界面:onPause -> onStop关闭电话界面,重新回到当前Activity:onRestart -> onStart->onResume2.7其他Activity进入下一个Activity:onPause -> onStop从其他Activity返回至当前Acitivity:onRestart -> onStart->onResume三、与Activity生命周期结合的应用场景3.1与广播(Broadcast)结合在onResume注册广播(registerLinstener),在onPause注销广播(unregisterLinstener)。
例如:做"摇一摇"功能(传感器)、监听网络变化,就可以在onResume中注册监听,在onPause里注销掉,已节省资源提高效率。
3.2与服务(Service)结合在onStart绑定服务(bindService),在onStop中取消绑定(unbindService)。
6.Activity生命周期

这七个方法定义了Activity的完整生命周期。 这七个方法定义了Activity的完整生命周期。实现这些方法可以帮助我们监视其中的三个嵌套生命周期循 Activity的完整生命周期 环:
• •
Activity的 自第一次调用onCreate()开始, onDestroy()为止 Activity的完整生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止。Activity在 自第一次调用onCreate()开始 直至调用onDestroy()为止。Activity在 onCreate()中设置所有 全局”状态以完成初始化,而在onDestroy()中释放所有系统资源。例如, 中设置所有“ onDestroy()中释放所有系统资源 onCreate()中设置所有“全局”状态以完成初始化,而在onDestroy()中释放所有系统资源。例如, 如果Activity有一个线程在后台运行从网络上下载数据,它会在onCreate()创建线程, Activity有一个线程在后台运行从网络上下载数据 onCreate()创建线程 如果Activity有一个线程在后台运行从网络上下载数据,它会在onCreate()创建线程,而在 onDestroy()销毁线程 销毁线程。 onDestroy()销毁线程。 Activity的 调用开始直到相应的onStop()调用结束。 Activity的可视生命周期自onStart()调用开始直到相应的onStop()调用结束。在此期间,用户可以 自onStart()调用开始直到相应的onStop()调用结束 在此期间, 在屏幕上看到Activity 尽管它也许并不是位于前台或者也不与用户进行交互。在这两个方法之间, Activity, 在屏幕上看到Activity,尽管它也许并不是位于前台或者也不与用户进行交互。在这两个方法之间, 我们可以保留用来向用户显示这个Activity所需的资源。例如,当用户不再看见我们显示的内容时, Activity所需的资源 我们可以保留用来向用户显示这个Activity所需的资源。例如,当用户不再看见我们显示的内容时, 我们可以在onStart()中注册一个BroadcastReceiver来监控会影响UI的变化,而在onStop()中来注消。 onStart()中注册一个BroadcastReceiver来监控会影响UI的变化 onStop()中来注消 我们可以在onStart()中注册一个BroadcastReceiver来监控会影响UI的变化,而在onStop()中来注消。 方法可以随着应用程序是否为用户可见而被多次调用。 onStart() 和 onStop() 方法可以随着应用程序是否为用户可见而被多次调用。 Activity的 调用起, onPause()调用为止 Activity的前台生命周期自onResume()调用起,至相应的onPause()调用为止。在此期间,Activity 自onResume()调用起 至相应的onPause()调用为止。在此期间, 位于前台最上面并与用户进行交互。Activity会经常在暂停和恢复之间进行状态转换——例如当设备 会经常在暂停和恢复之间进行状态转换—— 位于前台最上面并与用户进行交互。Activity会经常在暂停和恢复之间进行状态转换——例如当设备 转入休眠状态或者有新的Activity启动时,将调用onPause() 方法。 Activity获得结果或者接收到 Activity启动时 转入休眠状态或者有新的Activity启动时,将调用onPause() 方法。当Activity获得结果或者接收到 新的Intent时会调用onResume() 方法。关于前台生命周期循环的例子请见PPT下方备注栏 Intent时会调用 下方备注栏。 新的Intent时会调用onResume() 方法。关于前台生命周期循环的例子请见PPT下方备注栏。
Activity生命周期详解

当Activity从一种状态转变到另一种状态时,会调用以下保护方法来通知这种变化:void onCreate(Bundle savedInstanceState)void onStart()void onRestart()void onResume()void onPause()void onStop()void onDestroy()这七个方法定义了Activity的完整生命周期。
实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环:Activity的完整生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止。
Activity在onCreate()中设置所有“全局”状态以完成初始化,而在onDestroy()中释放所有系统资源。
例如,如果Activity有一个线程在后台运行从网络下载数据,它会在onCreate()创建线程,而在 onDestroy()销毁线程。
Activity的可视生命周期自onStart()调用开始直到相应的onStop()调用结束。
在此期间,用户可以在屏幕上看到Activity,尽管它也许并不是位于前台或者也不与用户进行交互。
在这两个方法之间,我们可以保留用来向用户显示这个Activity所需的资源。
例如,当用户不再看见我们显示的内容时,我们可以在onStart()中注册一个BroadcastReceiver来监控会影响UI的变化,而在onStop()中来注消。
onStart() 和 onStop() 方法可以随着应用程序是否为用户可见而被多次调用。
Activity的前台生命周期自onResume()调用起,至相应的onPause()调用为止。
在此期间,Activity位于前台最上面并与用户进行交互。
Activity会经常在暂停和恢复之间进行状态转换——例如当设备转入休眠状态或者有新的Activity启动时,将调用onPause() 方法。
当Activity获得结果或者接收到新的Intent时会调用onResume() 方法。
activity生命周期有几种状态

activity生命周期有几种状态
Activity生命周期有五种状态,分别是:
1.启动状态:当Activity启动后,会进入此状态,但此状态很短暂,会很快进入运行状态。
2.运行状态:Activity处于屏幕的最前端,它是可见的、有焦点的,并可以与用户进行交互,如单击、长按等事件。
此时,Activity 处于活动或运行状态。
3.暂停状态:在某些情况下,如Activity上覆盖了一个透明或非全屏的Activity,被覆盖的Activity仍然对用户可见,但无法获取焦点,此时它处于暂停状态。
暂停的Activity仍然是存活状态,保留着所有的状态和成员信息,并保持和窗口管理器的连接,但当系统内存不足时,它可能会被系统杀死。
4.停止状态:当Activity完全不可见时,如被另一个Activity 遮挡,它就处于停止状态。
此时,Activity仍然保留着当前的状态和成员信息,但由于对用户不可见,如果系统内存不足,这个Activity 很容易被系统杀死。
5.销毁状态:当Activity处于销毁状态时,意味着它将被清理出内存。
请注意,Activity生命周期指的是一个Activity从创建到销毁的全过程,包括上述的五种状态。
在Android开发中,理解和掌握Activity的生命周期对于内存管理和用户体验都至关重要。
activity的三种状态

activity的三种状态全文共四篇示例,供读者参考第一篇示例:Activity是Android平台上的一个重要组件,它代表了用户与手机应用的交互界面。
在Android开发中,Activity的状态管理是十分重要的,了解和掌握Activity的三种状态对于开发人员来说是至关重要的。
Activity一共有三种状态:运行状态、暂停状态和停止状态。
下面将依次详细介绍这三种状态及其生命周期。
1. 运行状态当一个Activity被启动之后,它就进入了运行状态。
在这个状态下,Activity处于前台,即用户正在与之交互。
Activity的生命周期方法如下:onCreate()、onStart()、onResume()。
在onCreate()方法中进行初始化工作,onStart()方法表示Activity正在被启动,onResume()方法表示Activity已经可见并且用户正在与之交互。
在运行状态下,Activity可以响应用户的各种操作,比如点击按钮、输入文字等。
当Activity接收到其他的Intent或者用户手动关闭了它,那么它就会进入到下一个状态:暂停状态。
2. 暂停状态当一个Activity被另一个Activity遮挡而失去焦点时,它就会进入暂停状态。
在这个状态下,Activity并没有被销毁,只是失去了用户的焦点。
Activity的生命周期方法如下:onPause()。
在onPause()方法中,通常会保存一些临时数据或者释放一些资源。
在暂停状态下,Activity仍然处于活动状态,只是没有焦点而已。
当用户重新回到这个Activity时,它就会执行onResume()方法重新获得焦点,进入运行状态。
如果用户关闭了这个Activity,那么它就会进入到下一个状态:停止状态。
了解和掌握Activity的三种状态对于Android开发人员来说是非常重要的。
只有深入理解这些状态及其生命周期,才能编写出更加稳定和流畅的Android应用。
Activity详细讲解

Activity详细讲解Activity 是我们开发Android应⽤程序最重要的⼀个类。
这个类的内容⽐较多,我理解多少就写多少,希望你喜欢:)这篇⽂章会涉及到以下⼏个内容⼀ Activity的⽣命周期⼆ 让Activity变成⼀个窗⼝:Activity属性设定三 你后台的Activity被系统回收怎么办:onSaveInstanceState四 调⽤与被调⽤:我们的通信使者 - Intent⼀ Activity的⽣命周期和其他⼿机平台的应⽤程序⼀样,Android的应⽤程序的⽣命周期是被统⼀掌控 的,也就是说我们写的应⽤程序命运掌握在别⼈(系统)的⼿⾥,我们不能改变它,只能学习并适应它。
简单地说⼀下为什么是这样:我们⼿机在运⾏⼀个应⽤程序的时候,有可能打进来电话发进来短信,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能,另外系统也不允许你占⽤太多资源,⾄少要保证电话功能吧,所以资源不⾜的时候也就有可能被⼲掉。
⾔归正传,Activity的基本⽣命周期如下代码所⽰:Java代码1. publicclass MyActivity extends Activity{2. protectedvoid onCreate(BundlesavedInstanceState);3.4. protectedvoid onStart();5.6. protectedvoid onResume();7.8. protectedvoid onPause();9.10. protectedvoid onStop();11.12. protectedvoid onDestroy();13. }public class MyActivity extends Activity {protected void onCreate(Bundle savedInstanceState);protected void onStart();protected void onResume();protected void onPause();protected void onStop();protected void onDestroy();}你⾃⼰写的Activity会按需要 重载这些⽅法,onCreate是免不了的,在⼀个Activity正常启动的过程中,他们被调⽤的顺序是 onCreate -> onStart -> onResume, 在Activity被⼲掉的时候顺序是onPause -> onStop -> onDestroy ,这样就是⼀个完整的⽣命周期,但是有⼈问了 ,程序正运⾏着呢来电话了,这个程序咋办?中⽌了呗,如果中⽌的时候新出的⼀个Activity是全屏的那么:onPause->onStop ,恢复的时候onStart->onResume ,如果打断 这个应⽤程序的是⼀个Theme为Translucent 或者Dialog 的Activity那么只是onPause ,恢复 的时候onResume 。
AndroidActivity的生命周期详细介绍
AndroidActivity的⽣命周期详细介绍Android Activity的⽣命周期详细介绍⽣命周期描述的是⼀个类从创建(new出来)到死亡(垃圾回收)的过程中会执⾏的⽅法。
在这个过程中,会针对不同的⽣命阶段调⽤不同的的⽅法。
Activity是Android中四⼤组件之⼀,是最常见的应⽤组件,也是⽤的最多的组件,它能够提供⼀个界⾯与⽤户进⾏交互。
Activity从创建到销毁有多种状态,从⼀种状态到另⼀种状态时会激发相应的回调⽅法,这些回调⽅法包括:onCreate onDestory onStart onStop onResume onPause。
这些⽅法都是两两对应的,onCreate-->创建与onDestory-->销毁;onStart-->可见与onStop-->不可见;onResume-->可编辑(焦点)和onPause-->未获得焦点。
最后还有⼀个⽅法是onRestart,这个⽅法在什么时候调⽤呢?当Activity被onStop后,但是并没有onDestory,即并没有被销毁时,⽤户重新回到当前Activity时,就调⽤onRestart⽅法,这⾥就不再是调⽤onCreate⽅法了。
public class MainActivity extends ActionBarActivity {private final static String TAG = "MainActivity";@Override// Activity被创建时调⽤protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);Log.e(TAG, "onCreate.......");}@Override// 该状态⽤户可见,但是⽤户还不能与之进⾏交互protected void onStart() {super.onStart();Log.e(TAG, "onStart.......");}@Override// 该状态是Activity获得⽤户焦点,⽤户可以与之进⾏交互protected void onResume() {super.onResume();Log.e(TAG, "onResume.......");}@Override//与onResume对应,当Activity失去焦点时调⽤protected void onPause() {super.onPause();Log.e(TAG, "onPause.......");}@Override//与onStart对应,当Activity不可见时调⽤protected void onStop() {super.onStop();Log.e(TAG, "onStop.......");}@Override//与onCreate对应,当Activity被销毁时调⽤protected void onDestroy() {super.onDestroy();Log.e(TAG, "onDestroy.......");}@Override//Activity从后台重新回到前台调⽤protected void onRestart() {super.onRestart();Log.e(TAG, "onRestart.......");}}Activity的完整⽣命周期:oncreate-->onstart-->onresume-->onpause-->onstop-->ondestory。
Activity生命周期(7个):
Activity⽣命周期(7个):1.onCreate;2.onStart;3.onResume;4.onPause;5.onStop;6.onRestart;7.onDestory;两种特殊情况:a-----Pause和Resumed: 当⽤户在Paused状态按返回键,会直接进⼊Resumed; b-----Stopped和Resumed: 当⽤户在Stopped状态按返回键,会去执⾏Restart(),在进⼊Resumed;定义⽣命周期的优点:①当⽤户接⼀个电话或切换到另⼀个程序不会崩溃; ②当⽤户后台运⾏程序时不会销毁有价值的系统资源; ③当⽤户离开再返回你的应⽤时不会丢失⽤户的进程; ④当⼿机屏幕进⾏横竖屏切换的时候不会崩溃或者丢掉⽤户的进程;现场保护(保存状态):⼀、为什么要做现场保护:1、Activity在⽣命周期中的Paused状态或Stoped状态下,内存空间紧张的时,系统很可能会⼲掉Activity,如果⽤户通过导航再返回刚被⼲掉的Activity,系统只能创建新的Activity,如果之前的Activity界⾯已有⽤户录⼊信息,如⽤户名和密码等,⽽在新的Activity中则没有了,这种时间就需要做现场保护2、横屏与竖屏切换时,⽣命周期变化如下:onPause()->onStop()->onDestroy()->onCreate()->onStart()->onResume()如果当前窗⼝中已录⼊部分信息,⽽⽤户不⼩⼼切换横竖屏,此时需要做现场保护。
///-------onSaveInstanceState(Bundle)--->调⽤时机:(1)、当⽤户按下HOME键时。
(2)、长按HOME键,选择运⾏其他的程序时。
(3)、按下电源按键(关闭屏幕显⽰)时。
(4)、从activity A中启动⼀个新的activity时。
(5)、屏幕⽅向切换时,例如从竖屏切换到横屏时。
Activity的生命周期
执行状态---->暂停状态:
当一个activity实例处于暂停状态的时候,这时候会触发onPause()状态
暂停状态---->执行状态:
这时候会触发onResume()
执行状态---->停止状态:
当一个新的activity打开之后会覆盖掉原来的activity,这时原来的activity处于停止状体,这是会调用onPause()和onStop()方法
声明:这两个方法只会在activity对象被系统自动回收的情况下才会调用,但是如果是按BACK键将一个Activity对象销毁系统是不会调用
这两个方法的。
方法之前】。他会将以名称-值对方式记录了activity动作状态的Bundle对象传递给onSaveInstanceState()方法。当activity再次启动
时,这个Bundle会传递给onCreate()方法和随着onSart()方法调用的onRestoreInstanceState(),所以他们两个都可以恢复捕获的状态。
对于onSaveInstanceState()和onRestoreInstanceState()方法知识的补充:
当系统而不是用户自己出于回收内存的考虑,关闭了一个activity之后。用户会期望当他再次回到那个activity的时候,它仍保持着
上次离开时的样子。为了获取activity被杀死前的状态,那么应该在android系统回收activity被回收之前调用该方法【最好是在onPause
void onStart()
void onRestart()
void onResume()
void onPause()
简述Activity生命周期
简述Activity⽣命周期copy from :基于Android 6.0的源码剖析,分析android Activity启动流程中ActivityManagerService所扮演的⾓⾊⼀、概述上⼀篇⽂章,介绍了startActivity是如何⼀步步创建的,再来看看⽣命周期的控制。
先来⼀张官⽅的Activity状态转换图:Activity的⽣命周期中只有在以下3种状态之⼀,才能较长时间内保持状态不变。
Resumed(运⾏状态):Activity处于前台,且⽤户可以与其交互。
Paused(暂停状态): Activity被在前台中处于半透明状态或者未覆盖全屏的其他Activity部分遮挡。
暂停的Activity不会接收⽤户输⼊,也⽆法执⾏任何代码。
Stopped(停⽌状态):Activity被完全隐藏,且对⽤户不可见;被视为后台Activity。
停⽌的Activity实例及其诸如成员变量等所有状态信息将保留,但它⽆法执⾏任何代码。
除此之外,其他状态都是过渡状态(或称为暂时状态),⽐如onCreate(),onStart()后很快就会调⽤onResume()⽅法。
⼆. ⽣命周期2.1 进程间通信对于App来说,其Activity的⽣命周期执⾏是与系统进程中的ActivityManagerService有⼀定关系的,接下来从进程和线程的⾓度来分析Activity的⽣命周期,这⾥涉及到系统进程和应⽤进程:system_server进程是系统进程,Java framework框架的核⼼载体,⾥⾯运⾏了⼤量的系统服务,⽐如这⾥提供ApplicationThreadProxy(简称ATP),ActivityManagerService(简称AMS),这个两个服务都运⾏在system_server进程的不同线程中,由于ATP和AMS都是基于IBinder接⼝,都是binder线程,binder线程的创建与销毁都是由binder驱动来决定的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学习并掌握Activity生命周期,对从事Android开发(或者打算日后从事这方面的开发工作)的朋友来讲,是至关重要的。
本文将用图解和实例的方式,向大家详细讲解Activity 生命周期的有关知识。
Activity有三个状态:1.当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态。
它就是响应用户操作的Activity。
2.当它上面有另外一个Activity,使它失去了焦点但仍然对用户可见时(如图),它处于暂停状态。
在它之上的Activity没有完全覆盖屏幕,或者是透明的,被暂停的Activity仍然对用户可见,并且是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接)。
如果系统处于内存不足时会杀死这个Activity。
3.当它完全被另一个Activity覆盖时则处于停止状态。
它仍然保留所有的状态和成员信息。
然而对用户是不可见的,所以它的窗口将被隐藏,如果其它地方需要内存,则系统经常会杀死这个Activity。
当Activity从一种状态转变到另一种状态时,会调用以下保护方法来通知这种变化:void onCreate(Bundle savedInstanceState)void onStart()void onRestart()void onResume()void onPause()void onStop()void onDestroy()这七个方法定义了Activity的完整生命周期。
实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环:Activity的完整生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止。
Activity 在onCreate()中设置所有“全局”状态以完成初始化,而在onDestroy()中释放所有系统资源。
例如,如果Activity有一个线程在后台运行从网络下载数据,它会在onCreate()创建线程,而在onDestroy()销毁线程。
Activity的可视生命周期自onStart()调用开始直到相应的onStop()调用结束。
在此期间,用户可以在屏幕上看到Activity,尽管它也许并不是位于前台或者也不与用户进行交互。
在这两个方法之间,我们可以保留用来向用户显示这个Activity所需的资源。
例如,当用户不再看见我们显示的内容时,我们可以在onStart()中注册一个BroadcastReceiver来监控会影响UI的变化,而在onStop()中来注消。
onStart() 和onStop() 方法可以随着应用程序是否为用户可见而被多次调用。
Activity的前台生命周期自onResume()调用起,至相应的onPause()调用为止。
在此期间,Activity位于前台最上面并与用户进行交互。
Activity会经常在暂停和恢复之间进行状态转换——例如当设备转入休眠状态或者有新的Activity启动时,将调用onPause() 方法。
当Activity获得结果或者接收到新的Intent时会调用onResume() 方法。
说了一大堆的理论,下面一起动手来开发一个小实例,帮助大家快速理解。
不妨试着动手去敲代码,然后自己监控控制台上的日志记录。
先贴出Activity部分的代码:最先是一个MainActivity,这个也是软件启动时默认打开的。
package cn.itcast.life;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;public class MainActivity extends Activity {private static final String TAG = "MainActivity";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);Log.i(TAG, "onCreate()");Button button = (Button) this.findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, OtherActivity.class); startActivity(intent);}});Button threebutton = (Button) this.findViewById(R.id.threebutton); threebutton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, ThreeActivity.class); startActivity(intent);}});}@Overrideprotected void onDestroy() { Log.i(TAG, "onDestroy()"); super.onDestroy();}@Overrideprotected void onPause() { Log.i(TAG, "onPause()"); super.onPause();}@Overrideprotected void onRestart() { Log.i(TAG, "onRestart()"); super.onRestart();}@Overrideprotected void onResume() { Log.i(TAG, "onResume()");super.onResume();}@Overrideprotected void onStart() {Log.i(TAG, "onStart()");super.onStart();}@Overrideprotected void onStop() {Log.i(TAG, "onStop()");super.onStop();}}MainActivity所匹配的xml布局文件:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android" android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello"/><Buttonandroid:layout_width="wrap_content" android:layout_height="wrap_content" android:text="打开OtherActivity" android:id="@+id/button"/><Buttonandroid:layout_width="wrap_content" android:layout_height="wrap_content" android:text="打开ThreeActivity" android:id="@+id/threebutton"/></LinearLayout>下面将是一个新的Activity,为了验证“onstop”方法,我们要用这个OtherActivity将前面的MainActivity覆盖掉。
package cn.itcast.life;import android.app.Activity;import android.os.Bundle;public class OtherActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(yout.other);}}<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="这是OtherActivity"/></LinearLayout>还有一个Activity,是用于测试onpause方法的。