从以下几个方面详细说一下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 生命周期的更多相关文章

  1. 详解Android Activity生命周期

    转载注明来自:  http://www.cnblogs.com/wujiancheng/ 一.正常情况下Activity的生命周期:  Activity的生命周期大概可以归为三部分 整个的生命周期:o ...

  2. 详解Android Activity启动模式

    相关的基本概念: 1.任务栈(Task)   若干个Activity的集合的栈表示一个Task.   栈不仅仅只包含自身程序的Activity,它也可以跨应用包含其他应用的Activity,这样有利于 ...

  3. Spring第三天,详解Bean的生命周期,学会后让面试官无话可说!

    点击下方链接回顾往期 不要再说不会Spring了!Spring第一天,学会进大厂! Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官! 今天讲解Spring中Bean的生命周期. ...

  4. Android Activity 生命周期详解

    学习android开发这么久对于activity的生命周期还没有仔细思考过,所以,我大致的把这些东西整理一下,希望通过这使自己理解的更透彻点吧! 首先看一下Activity生命周期图和它的的四个阶段 ...

  5. xamarin Android activity生命周期详解

    学Xamarin我为什么要写这样一篇关于Android 的activity生命周期的文章 已经学Xamarin android有一段时间了,现在想起当初Xamarin也走了不少的弯路.当然Xamari ...

  6. Android Activity生命周期详讲

    管理 Activity 生命周期 通过实现回调方法管理 Activity 的生命周期对开发强大而又灵活的应用至关重要. Activity 的生命周期会直接受到 Activity 与其他 Activit ...

  7. [转]: 两分钟彻底让你明白Android Activity生命周期(图文)!

    转自:http://blog.csdn.net/android_tutor/article/details/5772285 大家好,今天给大家详解一下Android中Activity的生命周期,我在前 ...

  8. Android Activity生命周期

    从android api文档摘抄出来的activity生命周期图如下: Activity有如下四种状态 a.活动状态  activity处于屏幕前台,获取到了焦点可以和用户进行交互,同一时刻只有一个a ...

  9. android Activity生命周期(设备旋转、数据恢复等)与启动模式

    1.Activity生命周期     接下来将介绍 Android Activity(四大组件之一) 的生命周期, 包含运行.暂停和停止三种状态,onCreate.onStart.onResume.o ...

随机推荐

  1. 分享15款很实用的 Sass 和 Compass 工具

    Sass 是 CSS 的扩展,增加了嵌套规则,变量,混入功能等很多更多.它简化了组织和维护 CSS 代码的成本.Compass 是一个开源的 CSS 框架,使得使用 CSS3 和流行的设计模式比以往任 ...

  2. iOS适配 旧项目工程在iOS9下不能正常显示

    在iOS开发中,很多时候会用到旧项目,比如版本的升级.使用Demo等等, iOS SDK正在不断的升级,不断的升级给iOS开发带来了新的活力. 然而在iOS SDK新的版本出来之后,旧项目可能会出现新 ...

  3. 视图xsl定制之嵌入服务器控件

    SharePoint 2010 视图 xsl 文件中支持嵌入服务器控件,嵌入服务器控件时,系统先采用xsl将视图xml解析成一个类似UserControl的存在,然后执行UserControl. 代码 ...

  4. iOS多线程之3.NSThread的线程间通信

      我们把一些耗时操作放在子线程,例如下载图片,但是下载完毕我们不能在子线程更新UI,因为只有主线程才可以更新UI和处理用户的触摸事件,否则程序会崩溃.此时,我们就需要把子线程下载完毕的数据传递到主线 ...

  5. Android github 快速实现多人协作

    前言:最近要做github多人协作,也就是多人开发.搜索了一些资料,千篇一律,而且操作麻烦.今天就整理一下,github多人协作的简单实现方法. 下面的教程不会出现:公钥.组织.team.pull r ...

  6. Javascript如何实现AOP

    简介: AOP(面向切面的编程)是为了解决功能的独立性与可维护性而提供的一种编程思想.当多个函数大量重复使用同一个功能时通过分层切分,将功能平衡的划分,从而提高低耦合性. JS中实现: index.h ...

  7. js中的运算总结(未完待续

    [74由几个1几个5几个10几个20组成] var num = 74; for(one = 0; one <= num; one++){ for(five = 0; five <= num ...

  8. #研发解决方案#discache-分布式缓存查询与管理系统

    郑昀 基于马海元和闫小波的文档 关键词:memcached.redis.分布式缓存.控制台.反序列化.Java 本文档适用人员:研发和运维员工 提纲: 如何查看缓存里的序列化数据? 批量删除来一个 监 ...

  9. ORACLE 10g 数据库体系结构图

    ORACLE 10g 的数据库体系结构图(ORACLE 10g(Release 2)ARCHITECTURE),非常的全面.系统.高屋建瓴的整体介绍了ORACLE 10g 的数据库体系结构.如果能全面 ...

  10. (转载)SQL去除回车符,换行符,空格和水平制表符

    http://www.cnblogs.com/insus/p/4815336.html MS SQL去除回车符,换行符,空格和水平制表符,参考下面语句,一般情况是SQL接受富文本或是textarea的 ...