Android中Activity的生命周期
简介:
这个基本是必问的问题了,说一下你对Activity生命周期的理解,呵呵…
onCreate, onStart, onResume, onPause, onStop, onDestroy, onRestart这些大家都知道 如何回答的不落俗套,比格高呢…
先上一张完整的生命周期图吧: Activity/Fragment生命周期总结
分析:
那么为什么要弄这么多函数出来呢,主要是因为在Android中,应用间切换的需求比较频繁,这么做主要是为了适应这种场景。比如两个Activity来回切换会有如下工作要做:
- 所有个静态初始化工作,此时view还不存在,需要创建view,绑定数据;提供之前封存的状态;(onCreate)
- 显示给用户(onStart)
- 开始与用户交互,显示动画,打开独占资源;(onResume)
- 保存所有的为保存数据,停止动画以及所有的耗CPU资源操作;提交在用户离开时期待保存的内容(例如邮件草稿);释放独占资源(以防下一个App使用);(onPause)
- 一些不适合放在onPause中做的工作(heavy-load)(onStop)
- 释放App关联资源,比如onCreate创建的线程,停止Trace收集,保证App终止时没有泄漏资源(onDestroy)
如果把这些所有启动动作都放在一个函数,比如onStart中明显是不合理的: 如果这两个Activity分别称为AAty和BAty,从A切换到B再切换到A,onCreate中的动作明显不需要再做了,所以必须要独立出来放到onCreate中,以便碰到这种情况的时候不执行onCreate;另外如果在onStart中显示动画显然也是不合理的,因为Activity在当时还不可见,所以把onResume独立出来。停止的过程则反之。
原则:
- onCreate里面尽量少做事情,避免程序启动太久都看不到界面
- onStart()方法是一个来验证某些必须的系统特性是否可用的比较好的地方。
- onPause()并不是Activity是否可见的最好指示器,有可能有keyboard在前台,应使用 onWindowFocusChanged(boolean) 做判断。
- 如果对应的onPause()在500ms内还没有执行完,ActivityManagerService就会强制关闭这个Activity.所以不应该使用onPause()来保存用户改变的数据 (例如填入表格中的个人信息) 到永久存储(File或者DB)上,而放到onStop中来加快切换速度。
- 几乎所有Activity的子类,都会实现onCreate和onPause这两个方法
- 不应该使用onDestroy保存数据,比如对content provider的保存应该在onPause或者onSavedInstanceState中进行,因为极端情况下,系统会直接杀死我们的app进程,并不执行activity的onDestroy()回调方法, 因此我们需要使用onStop()来释放资源,从而避免内存泄漏。
问题:
1. 切换过程为什么一定是A:onPause()->B:onCreate()->A:onStop()呢
如果不执行A:onPause()来释放独占资源,B根本无法使用。 先执行B:onCreate()最后再执行A:onStop()是为了尽快让B进入可交互状态,提升用户体验,onStop中一些耗时操作可以在可交互以后慢慢执行。
参考:
- Activity/Fragment最强生命周期总结
- Android Activity为什么要细化出onCreate、onStart、onResume、onPause、onStop、onDesdroy这么多方法让应用去重载?
Android中Activity的生命周期的更多相关文章
- 浅谈Android中Activity的生命周期
引言 我想对于Android开发人员来说,Activity是再熟悉不过了,今天我们就来探讨下Activity的生命周期.熟悉的掌握Activity对于开发健壮的Android应用程序来说至关重要.下面 ...
- 【android】android中activity的生命周期
activity生命周期: 实例代码: public class DemoActivity extends Activity { //1.activity第一次被创建的时候,执行 @Override ...
- Android应用程序中Activity的生命周期
Android应用程序中Activity的生命周期 对于Android来说Activity的生命周期是非常的重要,尤其是对于新学者来说,只有充分了解了Activity的生命周期,才能写出优良用户体验的 ...
- 每天一点Android干货-Activity的生命周期
Activity Activity是这样一个程序组件,它为用户提供一个用于任务交互的画面. 一个应用程序通常由多个activity组成,它们彼此保持弱的绑定状态.典型的,当一个activity在一个应 ...
- Android之Activity的生命周期
PS:写一发关于Activity的生命周期,也算是面试的重点内容. 学习内容: 1.Activity的生命周期 2.面对多种情况的时候Activity的生命周期 3.onSaveInstanceSta ...
- 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)
1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...
- android学习——activity的生命周期
Android中主要组件之Activity的生命周期,基本都是翻译Android API和个人的理解. 首先看一下Android api中所提供的Activity生命周期图: Activity其实是继 ...
- Android中服务的生命周期与两种方式的区别
服务的生命周期跟Activity的生命周期类似.但是生命周期甚至比你关注服务如何创建和销毁更重要,因为服务能够在用户不知情的情况下在后台运行. 服务的生命周期---从创建到销毁---可以被分为以下两个 ...
- Android的activity的生命周期
activity的生命周期有四个重要的状态:活动,暂停,停止,销毁 基本的方法有:onCreate.onStart.onResume.onPause.onStop.onDestory 最经常使用的方法 ...
随机推荐
- UVALive 3902 网络
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- js设计模式总结-单例模式
单例模式 解决的问题 保证实例只有一个,避免多个实现,从全局来看,这个实例的状态是唯一的. 实现原理 设置一个变量来记录实例,通过检测该变量是否为空来决定是否创建实例 非透明单例 所谓非透明就是用户在 ...
- Seo标签权重
最近接手凤凰焦点的业务,首先做的现有线上业务梳理,接着是拆分模块. 页头部分有些争议.假设把页头做成一个组件,pc端因为不能页面加载的差不多了页头才突兀的出来一是体验不好,还有不利于seo,最终决定还 ...
- Media Player插件
<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" ...
- BZOJ4247挂饰
Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩 ...
- ASP.NET 页面间传递参数的方法
http://www.cnblogs.com/eoiioe/archive/2008/04/08/1142247.html
- 解决jquery操作checkbox全选全不选无法勾选问题
最近在学习中使用jquery操作checkbox,使用下面方法进行全选.反选:$("input[name='checkbox']").attr("checked" ...
- error CS0117: `UnityEditor.EditorUtility' does not contain a definition for `GetAssetPreview'
have to replace: EditorUtility by AssetPreview
- centos 安装mongodb
原文引用:http://blog.chinaunix.net/uid-24250828-id-3770298.html 官方网站: http://www.mongodb.org/ MongoDB 安裝 ...
- (转)px、em、rem的区别和使用
国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem(国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位),那么三者有什么区别,又各自有什么优劣呢? 一.px特点 1. IE ...