Activity的生命周期
Activity的生命周期
以往我们实现页面间的跳转都是实例化Intent类的对象,但是页面在我们眼前的出现与消失没有我们所看到的那么简单,它有一个复杂的生命周期,一个页面的出现,被覆盖,再次出现,被覆盖,甚至销毁.......这样周而复始的过程就是Activity的生命周期。下面是一张Activity的生命周期表:

解释图例:
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
声明周期方法调用表:

案例说明:实现三个界面之间的相互跳转,观察Activity的生命周期(只举一个Activity跳转的例子)
第一步:定义三个Activity,实现父类的方法
public class oneActivity extends Activity {
private static final String TAG = "oneActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.oneactivity_main);
//获取事件源对象
Button but = (Button)this.findViewById(R.id.one_two);
Button but1 = (Button)this.findViewById(R.id.one_three);
//实例化DrawListener事件处理类的对象
loginListener dl = new loginListener(this);
//给事件源设置触屏监听方法,指定事件处理类的对象dl
but.setOnClickListener(dl);
but1.setOnClickListener(dl);
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, " onStart~~~");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, " onResume~~~");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, " onPause~~~");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, " onStop~~~");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, " onRrstart~~~");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, " onDestory~~~");
}
}
第二步:给键盘加上监听方法,有几个Activity就有几个监听方法,实现三个Activity之间的跳转
public class loginListener implements android.view.View.OnClickListener {
private oneActivity oa;
public loginListener(oneActivity oa) {//构造方法传参
this.oa = oa;
}
public void onClick(View v) {
// 获取事件源对象
Button but = (Button) v;
// 实例化Intent类的对象
Intent intent = new Intent();
if(but.getId()==R.id.one_two){
// 从第一个界面跳转到第二个界面
intent.setClass(oa, twoActivity.class);
}else{ // 从第一个界面跳转到第三个界面
intent.setClass(oa, threeActivity.class);
}
// 使用mainActivity来启动页面的跳转
oa.startActivity(intent);
// ma.finish();//销毁当前ma对象
}
}
注意:在我的程序中,第三个Activity不是满屏的状态,设置界面不是满屏状态的方法如下:

运行结果的分析:
我的第一个Activity:

我的第二个Activity:

我的第三个Activity:

从第一个Activity到第二个Activity:
第一个界面先暂停,第二个界面就开始创建,开始,呈现在眼前,最后第一个界面就停止了。

从第二个Activity到第三个Activity:
注意第二个界面是暂停的,因为第三个界面不是全屏,第二个界面依然可以看到,所以是暂停,不是停止。

从第三个Activity到第一个Activitty:
第二个界面先停止,第一个界面开始从创建,启动到呈现在眼前,最后第三个界面停止。

做一个返回的动作:(即又回到第二个和第三个界面叠加在一起的情况)
第二个界面启动,第三个界面重新启动,启动,呈现在眼前,第一个界面就停止消失并且被撤销了。

做一个Home的动作:
第三个界面先暂停,第二个界面消失,然后第三个界面也消失了。

Activity的生命周期的更多相关文章
- Android开发之Activity的生命周期以及加载模式
本篇博客就来好好的搞一下Activity的生命周期,如果搞过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似.生命周期,并不难理解.一个人的生命周 ...
- 浅谈Android中Activity的生命周期
引言 我想对于Android开发人员来说,Activity是再熟悉不过了,今天我们就来探讨下Activity的生命周期.熟悉的掌握Activity对于开发健壮的Android应用程序来说至关重要.下面 ...
- 每天一点Android干货-Activity的生命周期
Activity Activity是这样一个程序组件,它为用户提供一个用于任务交互的画面. 一个应用程序通常由多个activity组成,它们彼此保持弱的绑定状态.典型的,当一个activity在一个应 ...
- Android中Activity的生命周期
简介: 这个基本是必问的问题了,说一下你对Activity生命周期的理解,呵呵… onCreate, onStart, onResume, onPause, onStop, onDestroy, on ...
- Android Activity的生命周期简单总结
Android Activity的生命周期简单总结 这里的内容参考官方的文档,这篇文章的目的不是去总结Activity是如何启动,如何创造,以及暂停和销毁的,而是从实际开发中分析在Activity各个 ...
- Android之Activity的生命周期
PS:写一发关于Activity的生命周期,也算是面试的重点内容. 学习内容: 1.Activity的生命周期 2.面对多种情况的时候Activity的生命周期 3.onSaveInstanceSta ...
- 十分钟掌握Activity的生命周期与启动模式
1. Activity的生命周期 正常情况下的Activity生命周期如下图所示(来自Android Developer): 当资源相关的系统配置变更时(比如设备屏幕方向改变,键盘可见性变化),会导致 ...
- 横竖屏切换时,Activity的生命周期
横竖屏切换时,Activity的生命周期 1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate-->onStart-->onRe ...
- 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)
1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...
随机推荐
- Windows环境下vscode-go安装笔记
一.介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github.com/microsoft/vscode-go 这款插件的特性包括: ...
- Entity Framework 教程——模型浏览器
模型浏览器: 在之前的章节中,我们创建了第一个关于学校的实体数据模型.但是EDM设计器并没有将他所创建的所有对象完全显示出来.它只将数据库中的被选择的表与视图显示出来了. 模型浏览器可以将EDM所创建 ...
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(六)
(六)在Website Cloud中添加site 1新建Website,并打开 使用前面创建的用户 newbee@waplab.com 登录租户Portal,新建一个website 新建完成后, 可以 ...
- Web Service概念梳理
计算机技术难理解的很多,Web Service 对我来说就是一个很难理解的概念:为了弄清它到底是什么,我花费了两周的时间,总算有了一些收获,参考了不少网上的资料,但有些概念说法不一.我以w3c和 一些 ...
- 关于for循环的几个小练习,例如奇数偶数,阶乘,求和等
1 .100以内的奇数和偶数 var js = ""; var os = ""; for(var i=1;i<101;i++) { if(i%2 == 0 ...
- [函数] Firemonkey Windows 重新计算 Font Baseline
计算字型 Baseline 是一个不常用的函数,但如果想要显示不同大小文字下方对齐,就得用它来计算字型的 Baseline 才行,如果计算不准,显示的文字就会高高低低不整齐. 在 Firemonkey ...
- 在Eclipse中使用Git
一.打开Eclipse,以此点击菜单Help--Install New Software-, 此时将弹出Install对话框,如下图所示: 点击Add按钮,此时将弹出Add Repository对话框 ...
- 记录一次bug解决过程:resultType和手动开启事务
一.总结 二.BUG描述:MyBatis中resultType使用 MyBatis中的resultType类似于入参:parameterType.先看IDCM项目中的实际使用案例代码,如下: // L ...
- 千万pv大型web系统架构,学习从点滴开始
架构,刚开始的解释是我从知乎上看到的.什么是架构?有人讲, 说架构并不是一 个很 悬 乎的 东西 , 实际 上就是一个架子 , 放一些 业务 和算法,跟我们的生活中的晾衣架很像.更抽象一点,说架构其 ...
- Struts2入门(四)——数据输入验证
一.前言 1.1.什么是输入验证?为什么需要输入验证? 在上一篇文章中,我们学习了数据类型转换,我们提到了表示层数据处理的两个方法,也提到了用户输入数据需要进行类型转换才能得到我们想要的数据,那么,我 ...