Android 开发艺术探索


第一章

Activity 的生命周期

  • 当启动一个新的Activity时,旧Activity的onPause方法会先执行,然后才会启动新的Activity的onCreate,onStart,onResume;
  • Activity在异常状态下终止,系统会调用onSaveInstanceState方法来保存当前Activity的状态,这个方法的调用时机是在onStop之前,它和onPause没有既定的时序关系。
  • 每个View都有OnSaveInstanceState和onRestoreInstanceState这个两个方法,Activity重建后系统会调用onRestoreInstanceState,获取到保存的Bundle对象。
  • 当系统配置发生变化后,Activity会被重启,若不想重启,可设置Activity的ConfigChanges属性。

Activity的启动模式

给Activity指定启动模式有两种方法:

第一种通过AndroidMenifest

第二种通过Intent中设置标志位

  • 第二种方法的优先级要高于第一种

Activity启动4种模式:

    1. standard:标准模式
    1. singleTop:栈顶复用模式
    1. singleTask:栈内复用模式—singleTask模式的Activity切换到栈顶会导致它之上的栈内的Activity出栈。
    1. singleInstance:单实例模式

通过执行adb shell dumpsys activity命令:

  • 可以看出去掉singleTask后,连续点击3次,出现了2个任务栈,前台任务栈是第一个红框,里面有4个Activity,后台任务栈是第二个红框,是Android桌面。

常见Activity的Flags:

  • FLAG_ACTIVITY_NEW_TASK : 这个标记作用为Activity指定singleTask启动模式
  • FLAG_ACTIVITY_SINGLE_TOP : 这个标记作用为Activity指定singleTop启动模式
  • FLAG_ACTIVITY_CLEAR_\TOP : 同一个任务栈中所有位于它上面的Activity都要出栈,这个标记一般会和singleTask启动模式一起出现,在这样的情况下,被启动Activity实例如果存在,那么系统会调用它的onNewIntent。如果被启动的Activity采用standard模式启动,那么它连同它之上的Activity都要出栈,系统会创建新的Activity实例并放入栈顶。
  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS : 具有这个标记的Activity不会出现在历史Activity列表中,当某些情况下我们不希望用户通过历史列表回到我们的Activity的时候这个标记比较有用,等同于XML中指定Activity的属性android:excludeFromRecents="true"

IntentFilter的匹配规则:

隐式启动需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息,需要同时匹配过滤列表中的action、category、data信息,否则匹配失败。另外一个Activity中可以有多个intent-filter,一个Intent只要能匹配任何一组intent-filter即可成功启动Activity

  • action是一个字符串,Intent中的action能够和过滤规则中的任何一个action相同即可匹配成功。
  • Intent可以没有category,但如果一旦有,不管有几个,每个都要能够和过滤规则中的任何一个category相同
  • data由两部分组成,mimeType和URI。mimeType指媒体类型,比如image、JPEG、video等
    1.显示启动:用于启动同一个应用中的Activity,效率高
    2.隐式启动:用于启动不同应用中的Activity

Android开发探索---读后笔记(第一章)相关推荐

  1. 《Android深度探索》第一章心得体会

    <Android深度探索>第一章心得体会 由于Android系统现在的火爆,关于Android系统的应用开发不断出现,Android系统不一定只满足在手机这一种 平台上运行想要在不同的设备 ...

  2. [Android]《Android艺术开发探索》第一章读书笔记

    1. 典型情况下生命周期分析 (1)一般情况下,当当前Activity从不可见重新变为可见状态时,onRestart方法就会被调用. (2)当用户打开新的Activity或者切换到桌面的时候,回调如下 ...

  3. Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...

    <Android项目驱动式开发教程>第一章开发入门 1.4 项目框架分析 4 android:versionName="1.0" > 5 8 第9行代码andro ...

  4. scratch3.0 二次开发-基本介绍(第一章)

    scratch3.0系列章节列表 scratch3.0 二次开发-基本介绍(第一章) scratch3.0二次开发运行scratch-gui项目并了解工程结构(第二章) scratch3.0二次自定义 ...

  5. 使用HTML5和CSS3开发电子商务网站第一章HTLM5基础课后作业

    使用HTML5和CSS3开发电子商务网站第一章HTLM5基础课后作业 第三题,制作聚美优品常见问题页面. <!DOCTYPE html> <html lang="en&qu ...

  6. 《Android FFmpeg 播放器开发梳理》第一章 播放器初始化与解复用流程

    <Android FFmpeg 播放器开发梳理>: 第零章 基础公共类的封装 播放器初始化与解复用流程 这一章,我们来讲解播放器解复用(从文件中读取数据包)的流程.在讲解播放器的读数据包流 ...

  7. Android深度探索读后感第二章

    第二章 搭建Android开发环境 Android底层开发的环境,主要包括:Android应用程序开发环境,Android  NDK开发环境和交叉编译环境的搭建. Android应用程序开发环境:第一 ...

  8. Android深度探索第五章

    开发板是开发和学习嵌入式技术的主要硬件设备,开发板拥有许多扩展的端口,可以很容易开发定制的硬件,并与开发板链接.目前市面上的开发板型号和种类很多,但目前最流行的是基于三星S3C6410ARM11架构的 ...

  9. 微信小程序开发与应用 第一章 微信小程序的基本知识1

    1-1 第一章 第一节 微信小程序的基本知识1 文章目录 前言 一.注册一个小程序账号 二.第一个微信小程序"Hello Wechat!" (一)准备工作 (二)页面介绍 (三)代 ...

最新文章

  1. sap可以指定应用服务器,SAP扫盲系列之一:什么是SAP系统和应用服务器
  2. ubunu16.04 TensorFlow object detection API 应用配置
  3. [ucgui] 对话框7——按钮触发与模式窗口
  4. a标签传值到另一个页面_Vue组件传值与通信集合
  5. 数理统计-5.4 三大抽样分布
  6. 从微信服务器获取用户信息,微信小程序Ⅴ [获取登陆用户信息,重点openID(详解)]...
  7. netbeans7.4_带有NetBeans 7.1 RC 2的快速入门WebLogic 12c
  8. JAXB –新手的观点,第1部分
  9. Spring和JSF集成:转换器
  10. 轻快的VIM(三):删除
  11. linux 启动 x,(1)linux启动过程
  12. TCP协议及TCP正常连接与断开
  13. Google 要进军游戏行业了?!
  14. 基于Mesos和Docker的分布式计算平台
  15. oracle11gr2克隆安装,克隆安装Oracle 11G HOME
  16. linux fb设备驱动,Linux FB 驱动讲解
  17. 001 - CMake 安装
  18. 通过汉字查找五笔码和拼音
  19. html如何修改字体黑体,css如何设置黑体样式?
  20. FlashFXP连接ftp服务器上传下载

热门文章

  1. 五年磨一剑:滴滴顺风车服务端之稳定性规范
  2. windows无法自动修复此计算机 鼠标,win10出现你的账户已被停用。开机按F8进不去。自动修复鼠标和键盘都用...
  3. 情人节单身的你,是否用一张智能名片,进行表白
  4. python+vue+Elementui植物园网站的设计django
  5. 基于php+mysql的校园木本植物检索查询统
  6. 【2023.3.18 美团校招】
  7. 80386 Programmer's Manual: Chapter 9 Exceptions and Interrupts(Personal Translation)
  8. Android百度AI植物识别教程,微信开发+百度AI学习:植物识别(示例代码)
  9. 在无处落脚的大海,你就是我的岛屿
  10. 川藏北线-成都老茶馆叹茶