Android教程 -06 Activity的生命周期
本篇播客我们重点介绍下如下知识点:
- 程序启动原理
- Activity生命周期
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生命周期和销毁保存数据的一些知识,我们要合理使用这些知识。
- 使用app的时候,不会因为有来电通话或者切换到其他app而导致程序crash。
- 用户没有激活某个组件时不会消耗宝贵的系统资源。
- 离开app并且一段时间后返回,不会丢失用户的使用进度。
- 设备发生屏幕旋转时不会crash或者丢失用户的使用进度
Android教程 -06 Activity的生命周期的更多相关文章
- Android组件系列----Activity的生命周期
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- Android开发之Activity的生命周期以及加载模式
本篇博客就来好好的搞一下Activity的生命周期,如果搞过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似.生命周期,并不难理解.一个人的生命周 ...
- android 基础02 - Activity 的生命周期及状态
返回栈 Android 中的 Activity 是可以层叠的,当我们启动一个新的 Activity 时,就会覆盖在原有的 Activity 之上, 点击 Back 会销毁当前 Activity,下面的 ...
- Android Studio 之 Activity 的生命周期
翻转屏幕,会重新加载Activity package com.example.activitylivecycle; import android.os.Bundle; import android.u ...
- Android学习笔记----Activity的生命周期图示
转载,一目了然.
- Android Activity的生命周期
一.为什么要了解Activity的生命周期 activity is directly affected by its association withother activities, its tas ...
- Android开发艺术1之Activity的生命周期
作为<Android开发艺术探索>这本书的第一篇博客,我就多说几句.本系列博客旨在对书中相关内容进行解读,简化,提供一个入门到提高的流程.不敢说书评,也不能说教程,只希望对有些人有帮助就好 ...
- android开发艺术探索学习 之 结合Activity的生命周期了解Activity的LaunchMode
转载请标明出处: http://blog.csdn.net/lxk_1993/article/details/50749728 本文出自:[lxk_1993的博客]: 首先还是先介绍下Activity ...
- Android SDK上手指南:Activity与生命周期
Android SDK上手指南:Activity与生命周期 2013-12-26 15:26 核子可乐译 51CTO 字号:T | T Activity生命周期并不仅仅在用户运行应用程序之后才开始生效 ...
随机推荐
- birt运行环境
1.下载 http://pan.baidu.com/s/1nvhz5wt 2.解压birt-runtime-4.6.0-20160607.zip 将WebViewerExample更名为birt,复制 ...
- MyBatis Oracle批量插入
1.oracle如何insert into 多个values https://www.cnblogs.com/mq0036/p/6370224.html?utm_source=itdadao& ...
- 集训队日常训练20180513-DIV1
A.3132 给一个有向图,问能否从任意点出发都能进入一个环中. 深搜. #include<bits/stdc++.h> using namespace std; ; vector< ...
- Vbulletin Used to Show Malicious Advertisements
In the past, we have seen a massive amount of vBulletin websites compromised through theVBSeo Vulner ...
- 编译libusb库
之前需要安装依赖库 : libudevautomakeautoconflibtool ./bootstrap.sh ./configure --with-pic --prefix=/home/libu ...
- 第一次接触node.JS
1.初识node.js node.js平时可以关注: 一.nodejs.org看看nodejs的版本升级,新特性的加入,重要bug的修复等 二.www.npmjs.com模块社区,看他人源代码,省力 ...
- Header解析
不管是作为后端还是前端开发人员,对于web请求的过程和参数都是需要了解的. 下面是对一次简单的http请求的header分析,作为自己的一个总结,也希望对大家有所帮助. 以Chrome为例: 我们对h ...
- 【JZOJ5081】【GDSOI2017第三轮模拟】Travel Plan 背包问题+双指针+树的dfs序
题面 100 注意到ban的只会是一个子树,所以我们把原树转化为dfs序列. 然后题目就转化为,询问一段ban的区间,之后的背包问题. 比赛的时候,我想到这里,于是就开始想区间合并,于是搞了线段树合并 ...
- 阿里云linux服务器到期后续费,网站打不开解决方法之一
续费后打不开网站,可能会出现不同情况,这里只记录我遇到的问题 问题描述:服务器到期后续费,网站打不开. 解决尝试: 1.重启服务器nginx /etc/init.d/nginx restart ...
- FJWC2018
晚上水到8:40,感觉药丸. 把电脑带回寝室,大半夜敲键盘…… bzoj5254红绿灯 泰迪每天都要通过一条路从家到学校,这条路的起点是泰迪家,终点则是学校. 这条路中间还有n个路口,从第i-1个路口 ...