Android四大组件初识之Activity
一、Activity的生命周期
Activity生命周期是一系列方法调用。熟悉各个方法调用时间,我们在创建activity就能根据具体实现选择合适的方法覆盖。
1、 覆盖Activity的生命周期方法
常用的生命周期有 onCreate、onStart、onResume、onPostResume、onPause、onStop、onDestroy.
为了观察调用过程,把上述方法覆盖,在里面使用日志工具输出方法名。
2、 结果分析
activity被创建调用的方法。onStart调用完后界面显示。所以加载界面应该在onResume之前。
activity不可见调用的方法。不可见的情况包括界面切换、锁屏、有电话进来。不包括下滑或上滑显示的通知栏界面。
activity再次可见调用的方法。
activity销毁,在不可见的基础上多了OnDestroy的调用。
3、 其他情况
#所有的方法调用在同一个线程(UI线程)里面,所以某个方法长时间执行可能导致生命周期不成立,整个生命周期是事件处理,前面的事还没处理完,后面自然就不会处理。
#方法调用有缓存,一个操作第二次执行,若数据没改变,将直接使用第一次的结果。
二、Activity的跳转
Activity之间的跳转切换通过intent,在intent中设置了目标Activity就是显示。对应的隐式跳转是在intent中设置匹配参数,系统用参数与众多Activity匹配,然后决定跳转到某个界面。根据是否带有返回结果又分普通的和有返回结果的跳转。
1、 直接的界面跳转
在当前Activity(MainActivity)之中用Intent设置目标Activity(ScStandardActivity),可以用Intent传递少量的数据。调用startActivity。
在目标Activity通过getIntent获得intent,得到传入的数据。
2、 带有返回结果的跳转
这种方式跟普通调用的区别是目标Activity可以调用setResult方法回传一个携带数据的intent。原来的Activity可以在onActivityResult中得到该intent。
调用带返回结果的目标Activity。用startActivityForResult
目标Activity用setResult返回一个intent
处理返回结果。通过调用时设置的requestCode和返回设置的resultCode唯一确定一个调用关系。
3、 Intent隐式跳转
通过intent设置activity的配置参数,然后系统根据这些参数进行匹配,最后决定跳转到一个Activity。一个Activity的配置参数是通过清单文件intent-filter标签注册的。包括action、data、category等。系统匹配时先查看当前应用清单中有无匹配结果,然后才与系统注册的所有activity匹配,这时若有多个匹配结果就让用户去选择。
本例中一个activity的intent-filter配置
调用方式跟普通的一样
用例演示
三、Activity的启动模式
启动模式是对Activity创建的设置,是否要复用?是否新开任务栈?合理使用启动模式可以让程序运行更加流畅。消耗更少的资源。
1、 启动模式的设置
可以在清单文件中设置
也可以程序中通过Intent的addFlags设置。
2、 Standard模式
普通的创建方式,每次生成一个实例加入当前任务栈。不复用也不新开一个任务栈。
3、 SingleTop模式
栈顶复用,如果要创建的activity在栈顶,就直接复用。复用时只调用activity的onNewIntent并传入intent。
4、 singleTask模式
栈内复用,如果要创建的activity在当前任务栈中存在,就把他上面所有的activity出栈。调用onNewIntent。
5、 singleInstance模式
该模式只能在清单文件中设置,创建时新开一个任务栈,每次都复用一个activity。复用时调用onNewIntent。
最新文章
- ADO.NET学习系列(三)----做一个登录案例
- [Python]如何使用HtmlTestRunner让自动化测试报告内容更丰富
- 张艾迪(创始人):拥抱单身与自由的Eidyzhang
- iOS字体设置
- NIO与传统IO的区别
- 2016-03-15:关于VS中模块定义文件
- CodeForces 396C 树状数组 + DFS
- android 5.0 -- Palette
- hibernate的session详解
- C#版 - Leetcode 201. 数字范围按位与(bitwise AND) - 题解
- influxDB+grafana安装配置及邮件告警发送配置
- Numpy 基础
- autocomplete input
- js与jQuery操作select大全
- 2017";百度之星";程序设计大赛 - 复赛 01,03,05
- C# Winform模仿百度日历
- 李群与李代数在slam中的应用
- lca 欧拉序+rmq(st) 欧拉序+rmq(线段树) 离线dfs 倍增
- 【python】print · sys.stdout · sys.stderr
- 浅谈Cookie、Session与Cache的区别
热门文章
- requestAnimationFrame 兼容方案
- eclipse项目导入idea jdk版本不一致😵
- 重读《学习JavaScript数据结构与算法-第三版》-第2章 ECMAScript与TypeScript概述
- 阿里P8架构师浅析——MySQL的高并发优化
- 读取某个目录下的所有图片并显示到pictureBox
- 昂贵的聘礼 POJ - 1062
- ansible模块介绍之ios_facts
- Android进阶之绘制-自定义View完全掌握(一)
- 操作MySQL-数据库的安装及Pycharm模块的导入
- 实验Oracle数据文件被误删除的场景恢复