文档章节

Android-Activity的四状态、七生命周期、和四启动模式

北ing
 北ing
发布于 2015/10/19 19:32
字数 1281
阅读 33
收藏 2

一、四大基本组件简介:
Android四大基本组件:Activity、Service、Content Provider、Broadcast Receiver
Activity:活动视图
一个负责与用户交互的显示界面的组件。
Service:服务:一个没有界面、运行在后台的服务。
Content Provider:内容提供者,一个应用程序可以使用Content Provider来共享自己的数据,另一个应用想要使用该应用提供的数据时,可以通过ContentResolver来访问。
Broadcast Receiver:广播接收者:广播消息接收器,监听的事件源是Android应用中的其他组件。

二、概括
Android是使用任务(Task)来管理活动的,一个任务就是一组放在栈里的活动的集合,这个栈也称为返回栈,每当启动一个新的活动,它就会入栈,并处于栈顶的位置,当一个活动finish时会销毁活动,处于栈顶的活动会出栈。系统显示的总是栈顶的活动。
这里写图片描述

三、活动的四个状态
1)运行状态:当一个活动位于返回栈的栈顶时,这时活动就处于运行状态,最不会被系统回收的就是运行状态的活动
2)暂停状态:当一个活动不再处于栈顶的位置,但仍然可见,弹出一个对话框或者一个不能占满屏幕的活动都会导致前一个活动处于暂停状态,系统也不会轻易回收这样的活动,除非是内存极低的情况(回收可见的活动都会造成极不好的用户体验)
3)停止状态:当一个活动不处于栈顶位置,且完全不可见的时候,就进入停止状态,当内存较低时系统会回收这样的活动
4)销毁状态:当一个活动从栈中移除后就编程销毁状态,系统会回收这样的活动

四、活动的七大生命周期
这里写图片描述

1)onCreate()  :当Activity第一次被创建时调用,完成活动的初始化操作。
2)onStart()    :当用户可以看到这个Activity时调用
3)onResume() :当获得了用户的焦点时,就是用户点击了屏幕
4)onPause()   :当系统准备启动或回复另一个活动时调用。在这个方法中将一些小号CPU的资源释放,保存一些重要数据。
5)onStop() :当活动完全不可见是调用,当新启动的活动时对话框式的,还处于可见时,该方法是不会被调用
6)onDestroy():活动被销毁时调用
7)onRestart():当活动有停止状态变为运行状态时调用。

测试:
打开一个对话框式的活动:
这里写图片描述
打印:
这里写图片描述
当跳转到另一个活动时:
这里写图片描述

五、四种启动模式
1)standard:默认的模式,对于使用standard模式的活动,系统不管这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。
这里写图片描述

测试:
这里写图片描述
当前Mainactivity的Id是40f76d48
点击第一个按钮:Id变为40f8bdc0,说明新创建了一个活动
这里写图片描述

2)singleTop:当活动已经处在栈顶时,再启动这个活动时直接使用它而不会再次创建这个活动的实例,可以很好的解决重复创建栈顶活动的问题
这里写图片描述
点击启动singleTop模式Activity时,跳到该界面,Id:40f979e8
这里写图片描述
再点击该界面的按钮,Id没变,说明没有创建新的实例。

3)singleTask:singleTop模式可以很好的解决重复创建栈顶活动的问题,但是当该活动没有处于栈顶时,还有可能创建多个该实例, 这时就可以用singleTask模式。当活动模式指定为singleTask模式时,每次启动该活动时,系统会在返回栈中查看是否存在该活动实例,如果 存在则直接使用,不存才创建。
这里写图片描述

测试:
点击启动singleTaskActivity,Id是:40fcd3a0
这里写图片描述
再点击这个界面的按钮,跳到主界面,注意这是这个singleTaskActivity不处在栈顶,但还在栈中。
这里写图片描述
再重复第一步操作,依然跳到这个界面,Id没有变化。
这里写图片描述

4)singleInstance:指定为singleInstance模式的活动会启用一个新的任务栈来管理这个活动。用这种模式的活动主要是为了供其他程序共享该活动,如浏览器的使用。
这里写图片描述

测试:
创建一个新的应用,包含一个用singleInstance模式的activity,运行,Id是40f78bc8
这里写图片描述
然后在主界面点击启动SingleInstance Activity,结果是从这个程序直接跳到该上面那个应用。

六、总结
掌握好活动的生命周期能清楚的知道activity当前在什么状态,这样我们就知道在什么状态该做什么。活动的启动模式各有特点,没有最好的,只有最合适的,需要根据实际情况选择合适的模式。

源码下载


© 著作权归作者所有

共有 人打赏支持
北ing
粉丝 0
博文 12
码字总数 17332
作品 0
海淀
私信 提问
【Android学习总结】之Activity:深入理解、体验Activity的生命周期

【本博客内的文章是本人的学习笔记总结,如有错误请各位批评指正,谢谢!欢迎加入群285077071讨论】 关于Activity的生命周期的学习,我将从以下几个方面入手来全面认识: 一、什么是生命周期...

kinbos
06/26
0
0
Android知识点回顾之Activity基础

Activity生命周期 Activity的生命周期包括onCreate(),onRestart(),onStart(),onResume(),onPause(),onStop(),onDestroy()。其相互转化的过程如下图所示。左边的图是单个Activity的生命周期回...

星泉毅
2017/11/19
0
0
Android之MVVM架构指南(三):Lifecycle

使用 Lifecycle 管理 Activity 和 Fragment 组件的生命周期可以减少重复的样板代码以及减少不必要的麻烦。 开发中生命周期存在的问题 假设我们要实现一个定位的功能,我们需要在Activity的生...

吴七禁
10/22
0
0
03_Activity 生命周期介绍【图解】

一、基本概念 Activity 负责创建一个窗口,程序员可以通过 setContentView(View)向这个窗口添加一些 UI组件。本文将介绍 Activiy 的生命周期,并且展示一个小程序来验证 Activity 的执行过程...

晨曦之光
2012/03/14
420
0
详解Android中的四大组件之一:Activity详解

activity的生命周期 activity的四种状态 running:正在运行,处于活动状态,用户可以点击屏幕,是将处于栈顶的状态。 paused:暂停,处于失去焦点的时候,处于,可能是被如弹框一样遮盖,被通...

达叔小生
08/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Netty+Websocket 实现一个简易聊天室

服务端 /** * 服务端 */public class ChatServer {public static void main(String[] args) throws Exception {int port=8080; //服务端默认端口new ChatServer().bind(p...

这很耳东先生
1分钟前
0
0
一个本科学生对Linux的认知

我是一名大三的普通一本大学的软件工程的一名学生,学校开设了一些关于系统开发的课程,纸上得来终觉浅,学校的课程课时较短,想要在56个课时之内学会一些公司需要的技能,无疑是纸上谈兵,一...

linuxprobe16
2分钟前
0
0
如何选择开源许可证?

如何为代码选择开源许可证,这是一个问题。 世界上的开源许可证,大概有上百种。很少有人搞得清楚它们的区别。即使在最流行的六种----GPL、BSD、MIT、Mozilla、Apache和LGPL----之中做选择,...

吴伟祥
4分钟前
0
0
CDH 的Kerberos认证配置

最近因为项目需要,需要对用户权限做限制,最终选择了kerberos+sentry+hue模式来管理用户,但是这个kerberos实在搞得我头大的不行,在网上找各种资料,怎么配置都不行,后来索性静下心来研究...

hblt-j
4分钟前
0
0
[转载]重磅消息:误区陷阱、软件分类和GNU

stallman376032123 Non classé 16 octobre 2018 2 Minutes (注:对原文有精简) GPL、AGPL 并非最严格的许可证,详情请继续阅读本篇文章。可能很多人看到本文好多字,被字数吓得关闭网页,...

ICE冰焰火灵X
26分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部