一、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。

最新文章

  1. ADO.NET学习系列(三)----做一个登录案例
  2. [Python]如何使用HtmlTestRunner让自动化测试报告内容更丰富
  3. 张艾迪(创始人):拥抱单身与自由的Eidyzhang
  4. iOS字体设置
  5. NIO与传统IO的区别
  6. 2016-03-15:关于VS中模块定义文件
  7. CodeForces 396C 树状数组 + DFS
  8. android 5.0 -- Palette
  9. hibernate的session详解
  10. C#版 - Leetcode 201. 数字范围按位与(bitwise AND) - 题解
  11. influxDB+grafana安装配置及邮件告警发送配置
  12. Numpy 基础
  13. autocomplete input
  14. js与jQuery操作select大全
  15. 2017"百度之星"程序设计大赛 - 复赛 01,03,05
  16. C# Winform模仿百度日历
  17. 李群与李代数在slam中的应用
  18. lca 欧拉序+rmq(st) 欧拉序+rmq(线段树) 离线dfs 倍增
  19. 【python】print · sys.stdout · sys.stderr
  20. 浅谈Cookie、Session与Cache的区别

热门文章

  1. requestAnimationFrame 兼容方案
  2. eclipse项目导入idea jdk版本不一致😵
  3. 重读《学习JavaScript数据结构与算法-第三版》-第2章 ECMAScript与TypeScript概述
  4. 阿里P8架构师浅析——MySQL的高并发优化
  5. 读取某个目录下的所有图片并显示到pictureBox
  6. 昂贵的聘礼 POJ - 1062
  7. ansible模块介绍之ios_facts
  8. Android进阶之绘制-自定义View完全掌握(一)
  9. 操作MySQL-数据库的安装及Pycharm模块的导入
  10. 实验Oracle数据文件被误删除的场景恢复