详解 Android Activity 生命周期
从以下几个方面详细说一下Activity的生命周期:
1.回到主屏幕再打开和退出程序的时候。
2.屏幕旋转的时候。
3.打开其它的Activity的情况。
4.打开一个Layou透明的Activity的情况。
源代码:MyApplication.7z
先来一张Activity的生命周期图镇楼。

新建一个工程,实现如图所示的生命周期的所有方法,只是在方法里添加一个打印输出,让我们能清楚的看到
当前Activity执行的生命周期回调方法。
@Override
protected void onStart() {
System.out.println("onStart");
super.onStart();
} @Override
protected void onResume() {
System.out.println("onResume");
super.onResume();
} @Override
protected void onPause() {
System.out.println("onPause");
super.onPause();
} @Override
protected void onStop() {
System.out.println("onStop");
super.onStop();
} @Override
protected void onRestart() {
System.out.println("onRestart");
super.onRestart();
} @Override
protected void onDestroy() {
System.out.println("onDestroy");
super.onDestroy();
}
当我们第一次运行我们的程序,app进入主页面,看一下logcat的输出:执行了onCreate、onStart、onResume方法。

1.返回到主屏幕的时候。
我们按一下Home键返回到主屏幕,看一下它的执行的动作。

执行了onPause和onStop方法。点击我们的app,进入主程序发现它执行了onRestart、onStart和onResume。
我们第一次运行app的时候是没有执行onRestart方法的。和我们看官方的文档一至,在Activity被停止后再次激活的时候
才会被调用。
Called after your activity has been stopped, prior to it being started again.
Always followed by onStart()

我们点击关闭app看一下它会回调哪些生命周期函数。

这时它会执行onStop和onDestory方法。至此我们走完了一个最简单的生命周期流程。
2.旋转屏幕的时候。
运行我们的应用程序,和第一次打开一样调用create,start.和resume

接下来我们旋转一下屏幕看一下会发生什么。

一下子。调用了好多。它是先把Activity关闭掉,再重新new一个activity。这里就要注意了,如果我们的程序
需要支持屏幕旋转,那我这就要调用onSaveInstanceState()方法来保存当前的数据状态,在onCreate方法里恢复
这些状态的值。
3.打开一个其它的Activity.
修改一个我们的程序,在主页面加一个按钮,再加一个Activity。
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true"
/>
点击按钮的时候打开我们新添加的Activity
final Button btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MessageTip.class);
startActivity(intent);
}
});
运行我们的App.还是和之前一样调用 onCreate(),onStart() 和onResume.

然后在主页面上按一下我们的按钮,打开另一个Activity.

按返回键看一下。

它会调用onRestart(),onStart(),onResume。这样和我们讲的方法1.进入主屏幕再返回是一样的。
4.打开透明的Activity.
透明的Activity我们做一个简单的,直接在AndroidManifest.xml里添加一个行代码

再运行我们的app.调用那三个方法。

点击主页上的按钮打开透明的Activity.看一下调用了哪些函数。

只调用了onPause。点击返回

调用了onResume()方法。
发现没打开透明的Activity,原Acitvity没有调用onStop()方法,关闭透明的Activity。原Activity没有调用onRestart()
和onStart()方法。
ok就到这里,activity的生命周期非常重要!activity的生命周期非常重要!activity的生命周期非常重要!
重要的事情说三遍!!
源代码:MyApplication.7z
详解 Android Activity 生命周期的更多相关文章
- 详解Android Activity生命周期
转载注明来自: http://www.cnblogs.com/wujiancheng/ 一.正常情况下Activity的生命周期: Activity的生命周期大概可以归为三部分 整个的生命周期:o ...
- 详解Android Activity启动模式
相关的基本概念: 1.任务栈(Task) 若干个Activity的集合的栈表示一个Task. 栈不仅仅只包含自身程序的Activity,它也可以跨应用包含其他应用的Activity,这样有利于 ...
- Spring第三天,详解Bean的生命周期,学会后让面试官无话可说!
点击下方链接回顾往期 不要再说不会Spring了!Spring第一天,学会进大厂! Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官! 今天讲解Spring中Bean的生命周期. ...
- Android Activity 生命周期详解
学习android开发这么久对于activity的生命周期还没有仔细思考过,所以,我大致的把这些东西整理一下,希望通过这使自己理解的更透彻点吧! 首先看一下Activity生命周期图和它的的四个阶段 ...
- xamarin Android activity生命周期详解
学Xamarin我为什么要写这样一篇关于Android 的activity生命周期的文章 已经学Xamarin android有一段时间了,现在想起当初Xamarin也走了不少的弯路.当然Xamari ...
- Android Activity生命周期详讲
管理 Activity 生命周期 通过实现回调方法管理 Activity 的生命周期对开发强大而又灵活的应用至关重要. Activity 的生命周期会直接受到 Activity 与其他 Activit ...
- [转]: 两分钟彻底让你明白Android Activity生命周期(图文)!
转自:http://blog.csdn.net/android_tutor/article/details/5772285 大家好,今天给大家详解一下Android中Activity的生命周期,我在前 ...
- Android Activity生命周期
从android api文档摘抄出来的activity生命周期图如下: Activity有如下四种状态 a.活动状态 activity处于屏幕前台,获取到了焦点可以和用户进行交互,同一时刻只有一个a ...
- android Activity生命周期(设备旋转、数据恢复等)与启动模式
1.Activity生命周期 接下来将介绍 Android Activity(四大组件之一) 的生命周期, 包含运行.暂停和停止三种状态,onCreate.onStart.onResume.o ...
随机推荐
- 【grunt整合版】30分钟学会使用grunt打包前端代码
grunt 是一套前端自动化工具,一个基于nodeJs的命令行工具,一般用于:① 压缩文件② 合并文件③ 简单语法检查 对于其他用法,我还不太清楚,我们这里简单介绍下grunt的压缩.合并文件,初学, ...
- MySQL错误(一)
Host 'localhost' is not allowed to connect to this MySQL server 手贱误操作将root用户删除,解决办法: 找到mysql的配置文件 my ...
- iOS之POST与GET的优缺点
//请求数据时传参数要将汉字转码 //GET获取数据,所有的参数信息都会暴露 GET方法和POST方法对比: 优点: GET: 1.请求方便,直接用一个完整的路径去请求获取数据 2.发送求请求过程中不 ...
- cocos2dx骨骼动画Armature源码分析(一)
源码分析一body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-to ...
- The file “base.app” couldn’t be opened because you don’t have permission to view it.
Base项目是在Xcode7上创建的,升级Xcode8以后,编译时候提示错误: The file "base.app" couldn't be opened because you ...
- OC 类别与扩展(匿名类别)
OC 类别与扩展(匿名类别) 类别(Categroy): 又称为扩展类,在类的原基础上扩展方法,且不可添加变量,如果扩展的方法与原始类中的方法相同,则会隐藏原始方法,且不可在扩展方法中通过super调 ...
- php 与 java 生成时间戳的区别
最近服务器有java却换到php环境,生成的时间戳转换成时间格式的出现异常,查询资料得知: PHP 的 time() 函数返回的结果是 Unix 时间戳,值的单位是秒:如:1463564861 Jav ...
- JDK1.3安装出现/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory Done.
今天是出道以来第一次安装JDK1.3,大学的时候接触的也已是JDK1.4,而且是在Red Hat Enterprise Linux Server release 6.6上,安装JDK1.3是由于软件组 ...
- [AlwaysOn Availability Groups]AG扩展事件
AG扩展事件 SQL Server 2012定义了一些关于AlwaysOn的扩展事件.你可以监控这些扩展事件来帮助诊断AG的根本问题.你也可以使用以下语句查看扩展事件: SELECT * FROM s ...
- 关于IPB帧与恒定比特率、动态比特率的详解
之所以写这篇文章是因为有朋友对IPB帧的设置比较感兴趣,回复中说得比较简单,因此在这里详细的写一下,虽然说一般情况下我们很少去设置这个IPB帧,不过,如果真的学好了,并且清楚的了解了这个IPB帧的概念 ...