本篇播客我们重点介绍下如下知识点:

  1. 程序启动原理
  2. Activity生命周期
  3. Activity销毁与创建

    视频建议采用超清模式观看, 欢迎点击订阅我的优酷

程序启动原理

当用户从主界面点击程序图标时,系统会调用app中被声明为”launcher” (or “main”) activity中的onCreate()方法。这个Activity被用来当作程序的主要进入点。

我们需要在AndroidManifest.xml中声明主Activity,添加如下的意图过滤器

        <activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

Activity生命周期

Activity几种状态

Resumed:该状态下,activity处在前台,用户可以与它进行交互。(通常也被理解为”running” 状态)

Paused:该状态下,activity的部分被另外一个activity所遮盖:另外的activity来到前台,但是半透明的,不会覆盖整个屏幕。被暂停的activity不再接受用户的输入且不再执行任何代码。

Stopped:该状态下, activity完全被隐藏,对用户不可见。可以认为是在后台。当stopped, activity实例与它的所有状态信息(如成员变量等)都会被保留,但activity不能执行任何代码。

其它状态 (Created与Started)都是短暂的,系统快速的执行那些回调函数并通过执行下一阶段的回调函数移动到下一个状态。也就是说,在系统调用onCreate(), 之后会迅速调用onStart(), 之后再迅速执行onResume()。以上就是基本的activity生命周期。

生命周期的方法

onCreate() 当Activity 创建的时候调用

onStart() 可见的时候调用

onResume() 获取焦点的时候调用

onPause() 失去焦点的时候调用

onStop() 不可见的时候调用

onDestroy() 销毁的时候调用

onRestart() 重新可见的时候调用

Activity销毁时保存数据



当activity异常退出的时候会调用onSaveInstanceState() 保存数据,当重新打开的时候会调用onRestoreInstanceState()

    // 当Activity异常退出的时候调用
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.e(TAG, "onSaveInstanceState");
//保存了临时的数据
outState.putString("key","value");
}
// 异常退出重新打开的时候调用
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.e(TAG, "onRestoreInstanceState");
// 取出临时的数据
String value=savedInstanceState.getString("key");
Toast.makeText(getApplicationContext(),value,Toast.LENGTH_SHORT).show();
}

其实onRestoreInstanceState可以不用写,当程序异常退出时,有保存的数据,我们还可以在onCreate方法中取出来

    protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//如果之前保存过数据, 取出来
if(savedInstanceState!=null){
String value=savedInstanceState.getString("key");
Toast.makeText(getApplicationContext(),value,Toast.LENGTH_SHORT).show();
}
Log.e(TAG, "onCreate");
setContentView(R.layout.activity_life);
}

默认情况下,当手机横竖屏切换的时候,首先会销毁Activity,然后重新创建Activity,这时候Activity就被认为异常退出。

怎么保证Activity横竖屏切换的时候不会销毁重新创建呢?

视频建议采用超清模式观看, 欢迎点击订阅我的优酷

我们需要在清单文件中对Activity进行配置,添加了android:configChanges:

      <activity android:name=".LifeActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
>
</activity>

对android:configChanges属性,一般认为有以下几点:

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次,测试的时候发现在高版本并不会调用多次。

2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

但是,自从Android 3.2(API 13),在设置Activity的android:configChanges=”orientation|keyboardHidden”后,还是一样 会重新调用各个生命周期的。因为screen size也开始跟着设备的横竖切换而改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置”orientation”, 你还必须设置”ScreenSize”。

如果当前你的程序不允许横竖屏切换,可以加上android:screenOrientation配置,其中portrait是锁定竖屏,landscape是横屏

 <activity android:name=".LifeActivity"
android:screenOrientation="portrait"
>
</activity>

视频建议采用超清模式观看, 欢迎点击订阅我的优酷

最后建议

我们学习了Activity生命周期和销毁保存数据的一些知识,我们要合理使用这些知识。

  1. 使用app的时候,不会因为有来电通话或者切换到其他app而导致程序crash。
  2. 用户没有激活某个组件时不会消耗宝贵的系统资源。
  3. 离开app并且一段时间后返回,不会丢失用户的使用进度。
  4. 设备发生屏幕旋转时不会crash或者丢失用户的使用进度

Android教程 -06 Activity的生命周期的更多相关文章

  1. Android组件系列----Activity的生命周期

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  2. Android开发之Activity的生命周期以及加载模式

    本篇博客就来好好的搞一下Activity的生命周期,如果搞过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似.生命周期,并不难理解.一个人的生命周 ...

  3. android 基础02 - Activity 的生命周期及状态

    返回栈 Android 中的 Activity 是可以层叠的,当我们启动一个新的 Activity 时,就会覆盖在原有的 Activity 之上, 点击 Back 会销毁当前 Activity,下面的 ...

  4. Android Studio 之 Activity 的生命周期

    翻转屏幕,会重新加载Activity package com.example.activitylivecycle; import android.os.Bundle; import android.u ...

  5. Android学习笔记----Activity的生命周期图示

    转载,一目了然.

  6. Android Activity的生命周期

    一.为什么要了解Activity的生命周期 activity is directly affected by its association withother activities, its tas ...

  7. Android开发艺术1之Activity的生命周期

    作为<Android开发艺术探索>这本书的第一篇博客,我就多说几句.本系列博客旨在对书中相关内容进行解读,简化,提供一个入门到提高的流程.不敢说书评,也不能说教程,只希望对有些人有帮助就好 ...

  8. android开发艺术探索学习 之 结合Activity的生命周期了解Activity的LaunchMode

    转载请标明出处: http://blog.csdn.net/lxk_1993/article/details/50749728 本文出自:[lxk_1993的博客]: 首先还是先介绍下Activity ...

  9. Android SDK上手指南:Activity与生命周期

    Android SDK上手指南:Activity与生命周期 2013-12-26 15:26 核子可乐译 51CTO 字号:T | T Activity生命周期并不仅仅在用户运行应用程序之后才开始生效 ...

随机推荐

  1. Tomcat7 Redis Session共享

    1.环境 服务器 centos7 tomcat 7 redis nginx 2.配置tomcat配置文件context.xml <Valve className="com.orange ...

  2. 验证码倒计时js

    getVarify.js // 验证码计时--第一种 window.onload = function () { var send = document.getElementById('send'), ...

  3. hive-hbase表的建立

    HIVE-HBASE表CDH4的时候不成熟select*的时候会查询不出(必须通过字段名称),CDH5已经修复这点需要注意 接口表hive部分一般不做join select会占性能,因为hbase接口 ...

  4. P1460 健康的荷斯坦奶牛 Healthy Holsteins

    P1460 健康的荷斯坦奶牛 Healthy Holsteins 题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保 ...

  5. TP5.1 分页CSS样式(转载)

    效果如图: 1.在extend\目录下创建page目录,在page目录中创建Page.php文件,将以下代码放入文件中 <?php namespace page; use think\Pagin ...

  6. VS code 格式化插件, 仅需一步, 无须配置

    1.安装Beautify 2.重启vscode后 按F1, 点击 Beautify 即可

  7. QT_强杀进程

    #ifdef WIN32 bool res = false; HANDLE hToolHelp32Snapshot; hToolHelp32Snapshot = CreateToolhelp32Sna ...

  8. HR招聘_(五)_招聘方法论(电话邀约)

    .主动候选人 这部分候选人通过职位广告直接投递,大多对公司意愿度高(排除少数海投候选人),所以电话中一般需要了解如下信息: 目前状态,在职还是离职: 离职原因以及真实诉求: 岗位职责和团队情况: 薪资 ...

  9. Poj 2104区间第k大(归并树)

    题目链接 K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 36890 Accepted: 11860 C ...

  10. ylbtech-自信:自信

    ylbtech-自信:自信 自信心(confidence),在心理学中,与其最接近的是班杜拉(A.Bandura)在社会学习理论中提出的自我效能感 (self-efficacy)的概念,是指个体对自身 ...