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

Android四大组件初识之Activity的更多相关文章

  1. Android四大组件初识之Service

    Service作为Android四大组件之一,可以与Activity建立双向连接(绑定模式),提供数据和功能.也能够接收Intent单方面请求(调用模式),进行数据处理和调度功能. Service与A ...

  2. Android四大组件应用系列——Activity与Service交互实现APK下载

    Servic与Activity相比它没有界面,主要是在后台执行一些任务,Service有两种启动方法startService()和bindService(),startService方式Service ...

  3. Android四大组件之一:Activity

    介绍:活动是最基本的Android组件之一,在应用程序中,一个活动通常就是一个用户界面,每一个活动都被实现为一个独立的类,并且从活动几类中继承, 活动类将会显示由View控件组成的用户接口,并对时间E ...

  4. Android四大组件--活动(Activity)

    1. 概念 说明: 1). 创建和销毁 onCreate 和 onDestory 应用场景:当界面销毁的时候存储一些数据,在onCreate创建的时候回显数据: 例如:发短信:写短信写到一半,按hom ...

  5. Android 四大组件学习之Activity六

    本节学习Activity的状态保存与恢复. 先用样例開始: 布局文件主要是实现例如以下.大家自行编写 Activity逻辑代码: public class FiveActivity extends A ...

  6. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  7. Android四大组件之——Activity(一)定义、状态和后退栈(图文详解)

    什么是Activity 关键字:应用组件.四大组件.用户界面,交互. An Activity is an application component that provides a screen wi ...

  8. Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

                如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com   ...

  9. Android成长日记-Android四大组件之Service组件的学习

    1.什么是Service? Service是Android四大组件中与Activity最相似的组件,它们都代表可执行的程序,Service与Activity的区别在于:Service一直在后台运行,它 ...

随机推荐

  1. 从SpringBoot构建十万博文聊聊缓存穿透

    前言 在博客系统中,为了提升响应速度,加入了 Redis 缓存,把文章主键 ID 作为 key 值去缓存查询,如果不存在对应的 value,就去数据库中查找 .这个时候,如果请求的并发量很大,就会对后 ...

  2. 【POJ - 2387】Til the Cows Come Home(最短路径 Dijkstra算法)

    Til the Cows Come Home 大奶牛很热爱加班,他和朋友在凌晨一点吃完海底捞后又一个人回公司加班,为了多加班他希望可以找最短的距离回到公司.深圳市里有N个(2 <= N < ...

  3. koa2+vue实现登陆以及是否登陆控制

    这里我们先说说登陆以及登陆状态控制需要的插件jsonwebtoken,jsonwebtoken就可以实现token的生成与反向解密出用户数据.安装步骤: npm install jsonwebtoke ...

  4. Vector使用方法简单整理

    使用vector,需要引用vector库: #include<vector> 首先,创建一个可以容纳int的vector变量——arr: vector<int> arr; 接着 ...

  5. JMeter定制Sampler

    1.背景 相信大家在使用JMeter工具测试的时候,经常会遇到自带采样器无法满足测试要求的情况.面对这种情况,通常的办法是使用万能的自定义Java Request的达到测试目的.这个方法有个弊端,只要 ...

  6. Ubuntu下安装php7.1的gd,mysql,pdo_mysql扩展库

    执行以下命令 # apt-get install php7.1-gd # apt-get install php7.0-mysql 重新启动 php7.1-fpm(因为我是安装的 Nginx 和 ph ...

  7. Linux 下用C语言连接 sqlite

    1.在 /home/ 新建一个文件夹名为 sqlite #cd /home #mkdir sqlite 2.编写C语言代码,名称为 sql.c,代码如下 // name: sql.c // This ...

  8. Could not determine type for java util List

    问题场景:在实体类中需要使用List集合存储字段,启动时找不到List类型 问题解决:在字段上添加@ElementColletion(targetClass=String.class)表示是一个集合映 ...

  9. python相关,各种命令集合

    PS: cmd必须管理员身份运行 python版本 2.7  可能会出现编码问题:在 Lib/site-packages 新建文件 sitecustomize.py import sys  sys.s ...

  10. DES加解密工具类

    这两天在跟友商对接接口,在对外暴露接口的时候,因为友商不需要登录即可访问对于系统来说存在安全隐患,所以需要友商在调用接口的时候需要将数据加密,系统解密验证后才执行业务.所有的加密方式并不是万能的,只是 ...