一、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. 进程间通信与ipcs使用7例

    进程间通信(IPC, inter-process communication)实现进程间消息的传递,对于用户地址空间相互独立的两个进程而言,实现通信可以通过以下方式: 由内核层面分配内存,两进程共享该 ...

  2. Linux文件及目录管理

    1.Linux文件目录树 /:根目录,linux文件系统的最顶端和入口 bin:存放用户二进制文件(如:ls,cd,mv等),实则/user/bin的硬链接(相当于Windows系统的快捷方式) bo ...

  3. 神奇的 SQL 之温柔的陷阱 → 三值逻辑 与 NULL !

    前言 开心一刻   一个中国小孩参加国外的脱口秀节目,因为语言不通,于是找了一个翻译. 主持人问:“Who is your favorite singer ?” 翻译:”你最喜欢哪个歌手啊 ?” 小孩 ...

  4. SQLServer数据库处于恢复挂起状态的解决办法

    一.总结 如果数据库处于一个恢复挂起的状态,并且对数据库做脱机和分离的操作,报出数据库文件不可访问的错误,可能是因为数据库的数据文件和日志文件在数据库正常连接的情况下,文件所在的磁盘脱机了,导致数据库 ...

  5. Mac 查找粘贴板记录

    0x00 大落 一件蛮坑爹的事情,复制了找了好久的内容合集,在回别人的信息的时候又进行了复制其他内容的操作,结果吾覆盖了的上一次复制的内容-- 于是开始找找 macOS 有没有粘贴板记录的东西,然后在 ...

  6. Kafka 系列(三)—— Kafka 生产者详解

    一.生产者发送消息的过程 首先介绍一下 Kafka 生产者发送消息的过程: Kafka 会将发送消息包装为 ProducerRecord 对象, ProducerRecord 对象包含了目标主题和要发 ...

  7. 章节十六、1-TestNG简介

    一.TestNG 介绍 1.TestNG 是一个来自 JUnit 和 NUnit 的测试框架,它具拥有更多的功能,提高了 执行的效率. 2.TestNG 是一个开源的自动化测试框架 去除了老框架的大部 ...

  8. RuntimeError: one of the variables needed for gradient computation has been modified by an inplace

    vgg里面的 ReLU默认的参数inplace=True 当我们调用vgg结构的时候注意 要将inplace改成 False 不然会报错 RuntimeError: one of the variab ...

  9. web项目jsp中无法引入js问题

    https://blog.csdn.net/C1042135353/article/details/80274685#commentBox 这篇文章超赞的,几个小时的时间看了这篇文章豁然开朗,瞬间懂了 ...

  10. Django Mysql数据库-F查询和Q查询

    一.F查询和Q查询 F查询: 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较.F() 的 ...