文档章节

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

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

一、四大基本组件简介:
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 | 生命周期 | 启动模式 | Flags | IntentFilter action data的匹配规则 (一)

说几点 1.文章中大部分(所有吧)的内容都是与《Android开发艺术探索》书中写的内容是一致的,所以可以说是直接copy了一遍(没办法,作者写的太好了)。 2.为什么要copy一遍呢?,主要还是为...

a_zhon ⋅ 05/09 ⋅ 0

Android 面试技能树梳理

相信大家都有面试的经历,相对比面试官的问的一些问题其实都是基础的知识,但就是一些基础的知识我们也不是很完美的回答出来,我们也知道现在的开发人员很多,一家公司一个岗位就会有很多的开...

liu3364575 ⋅ 05/05 ⋅ 0

Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析

每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一个具体的应用程序窗口。与Activity组件所关联的窗口对象的实际类型为PhoneWindow。 那么创建...

lonamessi ⋅ 05/31 ⋅ 0

VirtualApk启动插件Activity

插件以APK的形式保存在SD卡上,通过startActivity方式启动Activity需要首先将Activity注册到AndroidManifest.xml,如果没有注册就会出现如下错误。 要实现插件Activity的启动需要解决以下问题...

JasmineBen ⋅ 05/16 ⋅ 0

使用Kotlin高效地开发Android App(四)

一. 运算符重载 在Kotlin的世界里,我们可以重载算数运算符,包括一元运算符、二元运算符和复合赋值运算符。 使用operator修饰符来修饰函数名的函数,这些函数可以是成员函数也可以是扩展函数...

fengzhizi715 ⋅ 05/25 ⋅ 0

如何让你的app在后台被干掉后优雅的启动。

作为一名Android开发师,肯定在处理用户的体验上下一定的功夫。有这么一个场景,在用户用着你开发的app的时候,突然某个聊天工具来消息了,切换到聊天工具后长时间停留,并且可能做了一些你不...

她的梦z ⋅ 04/11 ⋅ 0

Android 【插件化】"偷梁换柱"的高手-VirtualApk源码解析

关于VirtualApk VirtualApk github : https://github.com/didi/VirtualAPK VirtualAPK wiki : https://github.com/didi/VirtualAPK/wiki 工程介绍 工程结构 CoreLibrary是VirtualApk(以下简称......

qq_17250009 ⋅ 04/12 ⋅ 0

Android插件化原理(一)Activity插件化

相关文章 Android深入四大组件系列 Android解析AMS系列 Android解析ClassLoader系列 前言 四大组件的插件化是插件化技术的核心知识点,而Activity插件化更是重中之重,Activity插件化主要有三...

刘望舒 ⋅ 05/29 ⋅ 0

Activity启动模式的理解

一、理解 Tasks and Back Stack(任务和后台堆栈) 一个 App 对应一个 Task,该app 内的所有 activity 被安排在一个后台堆栈里。 多窗口模式下:一个windows下可能由多个 Task,系统为每个窗...

Agnes2017 ⋅ 05/04 ⋅ 0

Android插件化开发之动态加载技术学习

Android插件化开发之动态加载技术学习 为什么要插件化开发和动态加载呢?我认为原因有三点: 可以实现解耦 可以解除单个dex函数不能超过65535的限制 可以给apk瘦身,比如说360安全卫士,整个...

幸运券发放 ⋅ 05/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

思路分析 如何通过反射 给 bean entity 对象 的List 集合属性赋值?

其实 这块 大家 去 看 springmvc 源码 肯定可以找到实现办法。 因为 spirngmvc 的方法 是可以 为 对象 参数里面的 list 属性赋值的。 我也没有看 具体的 mvc 源码实现,我这里只是 写一个 简...

之渊 ⋅ 29分钟前 ⋅ 0

vim使用手册--配对括号的查找

1、把光标放在标记有(、[或{处。 2、按%字符 3、此时光标的位置应当在配对的括号处 4、再次按%就可以跳回配对的第一个括号处。

dragon_tech ⋅ 32分钟前 ⋅ 0

c++ 、object-c printf,%02X和%x有什么区别 ?

%x即按十六进制输出,英文字母小写,右对齐。 %02X有以下变化:英文字母变大写,如果输出字符不足两位的,输出两位宽度,右对齐,空的一位补0。超过两位的,全部输出。 如果不用 %02x 会出现...

yizhichao ⋅ 37分钟前 ⋅ 0

Spring源码解析(七)——实例创建(中)

前言 上一节讲到了,Spring 会根据实例的作用域执行不同的创建逻辑,分别是 Singleton、Prototype、其他 Scope,其中 Singleton 会调用 getSingleton 从缓存中获取,缓存中没有才会创建实例;...

MarvelCode ⋅ 38分钟前 ⋅ 0

Thrift RPC实战(六) spring集成thrift

1.服务端设置 对泛型Thrift Service的支持, 通过采用spring配置以及反射的方式来实现.对于一个服务提供者来说,需要提供端口,接口以及接口实现类,因此在接口中spring配置文件中配置如下 <!...

lemonLove ⋅ 40分钟前 ⋅ 0

oracle11g自动分区使用

为什么使用自动分区? 在oracle11g之前,oracle是不支持自动分区功能的,这就可能导致我们系统在运行一段时间之后,就需要看看分区是否创建或者写触发器进行创建分区,否则就会导致数据无法入...

strict_nerd ⋅ 51分钟前 ⋅ 0

Spring mvc ViewResolver视图解析器实现机制

概要 我们在controller里面经常这样return一个ModelAndView。 return new ModelAndView("userList", "users", userList); DispatcherServlet 靠 ViewResolver 把 userList 解析为 /WEB-INF......

轨迹_ ⋅ 今天 ⋅ 0

策略模式

1.策略模式 策略模式是同一个行为的不同处理办法。策略模式和简单工厂模式的区别:1.策略模式主要是方法的执行方式,工厂模式要获取的对象。两者的侧重点不同。 ...

Cobbage ⋅ 今天 ⋅ 0

行政区划代码转为字典形式

原数据为: http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/201804-06041553.html 手动替换了一下格式,并使用下面的代码处理. # 输入格式s = """110000:北京市110101:东城区1101...

漫步海边小路 ⋅ 今天 ⋅ 0

android apk 签名

创建key,需要用到keytool.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),把...

国仔饼 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部