内容来源:Android开发艺术探索第一章:Activity的生命周期与启动模式

  • 不能在onPause中做重量级的操作,因为必须执行完成以后新Activity才能Resume。onPauseonStop都不能执行耗时的操作,尤其是onPause.这就意味着,我们应当尽量在onStop中做操作,而使得新Activity尽快显示出来并切换到前台。

  • onSaveInstanceStateonRestoreInstanceState:Android保存数据的机制。Activity被销毁后调用onSaveInstanceState来保存数据,重新创建时在onCreateonRestoreInstanceState中恢复存储的数据。 系统只在Activity异常终止的时候才会调用onSaveInstanceStateonRestoreInstanceState来存储和恢复数据,其他情况不会触发这个过程。如Activity正常销毁时不会触发。

  • 当系统配置改变后(如横竖屏切换),Activity会重新创建。若要不让它重新创建,可以给Activity指定configChanges属性。如
    android:configChanges="orientation",设置屏幕旋转时Activity不重新创建。| 号可连接多个值,如
    android:configChanges="orientation|keyboardHidden"

  • Activity的LaunchMode

    1. standard : 标准模式,系统的默认模式。Context类型启动standard模式的Activity会报错。因为standard模式的Activity默认会进入启动它的Activity所属任务栈中,而非Activity类型的Context并没有任务栈。故需为待启动的Activity指定FLAG_ACTIVITY_NEW_TASK标志位,以使启动时候为它创建一个新的任务栈。
    2. singleTop : 栈顶复用模式。若新Activity已经位于任务栈的栈顶,则此Activity不会被重新创建。onNewIntent方法会被回调。
    3. singleTask : 栈内复用模式。只要Activity在一个栈中存在,则多次启动该Activity都不会重新创建实例。设Activity为A,启动时,先寻找是否存在A所想要的任务栈,若不存在,创建新任务栈并把A实例放入栈中。若存在A所需的任务栈,则看A在任务栈中,是否已经有实例存在,若有实例存在,则将A调到栈顶并调用onNewIntent方法。若无实例存在,则创建实例压入栈中。此外,singleTask默认具有clearTop效果,即任务栈S1,情况为ADBC,启动D,则D上面的Activity全部出栈,此时S1:AD。
    4. singleIntance : 单实例模式。加强的singleTask,具备singleTask所有特性,还特殊的,此种模式的Activity都单独位于一个任务栈中。此种模式的Activity A启动后,会创建一个新的任务栈,A独自在该Activity中,由于栈内复用的特性,后续请求都将不会创建新的Activity,除非这个独特的任务栈被系统销毁了。
  • 给Activity指定启动模式

    • 方式一:通过AndroidManifest指定
      android:launchMode="singleTask"
    • 方式二:在Intent中设置标志位
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

    • 区别:优先级方式二高于方式一;限定范围不同。

  • TaskAffinity属性: 该属性标识了一个Activity所需要的任务栈的名字。默认情况下,所有Activity所需任务栈名字为应用包名。若单独为Activity 指定一个与包名不同的TaskAffinity属性值,则启动该Activity时,若不存在与该属性值同名的任务栈,则会创建一个新的以该属性值命名的任务栈。

  • adb shell dumpsys activity : 检测Activity任务栈

  • Activity的Flags 几种常见标志位

    • FLAG_ACTIVITY_NEW_TASK : 与为Activity指定 "singleTask”启动模式相同
    • FLAG_ACTIVITY_SINGLE_TOP:与为Activity指定 "singleTop”启动模式相同
    • FLAG_ACTIVITY_CLEAR_TOP:具有此标志位的Activity,启动时再同一个任务栈中所有位于他上面的Activity都要出栈。若被启动Activity采用standard模式启动,则它连同它之上的Activity都要出栈,系统会创建新的Activity实例并放入栈顶。若和singleTask一起出现,若被启动Activity实例已经存在,系统会调用onNewIntent。
    • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS : 具此标志的Activity不会出现在历史Activity的列表中,当某些情况不希望用户通过历史列表回到我们的Activity时使用。等同于在xml中指定Activity属性 android:excludeFromRecents="true"

Android开发艺术探索笔记之Activity的更多相关文章

  1. Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式

    Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...

  2. Android开发艺术探索笔记——View(二)

    Android开发艺术探索笔记--View(二) View的事件分发机制 学习资料: 1.Understanding Android Input Touch Events System Framewo ...

  3. Android开发艺术探索笔记—— View(一)

    Android开发艺术探索笔记 --View(一) View的基础知识 什么是View View是Android中所有控件的基类.是一种界面层控件的抽象. View的位置参数 参数名 获取方式 含义 ...

  4. ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记

    原文链接 http://sparkyuan.me/ 转载请注明出处 View的绘制流程是从ViewRoot的performTraversals方法開始的.它经过measure.layout和draw三 ...

  5. Android中View的事件分发机制——Android开发艺术探索笔记

    原文链接 http://sparkyuan.me/ 转载请注明出处 介绍 点击事件的事件分发就是对MotionEvent事件的分发过程.当一个MotionEvent产生了以后,系统须要把这个事件传递给 ...

  6. Android开发艺术探索读书笔记——01 Activity的生命周期

    http://www.cnblogs.com/csonezp/p/5121142.html 新买了一本书,<Android开发艺术探索>.这本书算是一本进阶书籍,适合有一定安卓开发基础,做 ...

  7. 《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化

    第13章 综合技术 13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢?利用Thread类的set ...

  8. 《Android开发艺术探索》读书笔记 (9) 第9章 四大组件的工作过程

    第9章 四大组件的工作过程 9.1 四大组件的运行状态 (1)四大组件中只有BroadcastReceiver既可以在AndroidManifest文件中注册,也可以在代码中注册,其他三个组件都必须在 ...

  9. 《android开发艺术探索》读书笔记(十五)--Android性能优化

    接上篇<android开发艺术探索>读书笔记(十四)--JNI和NDK编程 No1: 如果<include>制定了这个id属性,同时被包含的布局文件的根元素也制定了id属性,那 ...

随机推荐

  1. golang RPC通信读写超时设置

    golang RPC通信中,有时候就怕读写hang住. 那是否可以设置读写超时呢? 1.方案一: 设置连接的读写超时 1.1 client RPC通信基于底层网络通信,可以通过设置connection ...

  2. CountDownLatch用法实践

    项目中写多线程时,需要判断所有线程是否执行完毕,所以想到了添加累加器来判断.这个累加器使用什么变量,找到了以下2种方式. 1. 类似AtomicInteger这种提供原子操作的类型AtomicInte ...

  3. robotFramework——FOR循环语句

    robotframework支持FOR循环语句,语法和Python的语法基本相同,但robotframework中,“FOR”关键字前面需要增加一个“:”,写成“:FOR”,其它与Python的语法相 ...

  4. [转] margin负值的探讨

    原文:  margin负值-权威指南 [http://www.csswang.com/exp/cssexp/3863.html] static元素是没有设定成浮动的元素,下图说明了负margin对st ...

  5. 使用SpringWebFlow

    使用SpringWebFlow 本章主要内容: · 创建会话式的Web应用程序 · 定义流程状态和行为 Spring Web Flow 是Spring MVC 的扩展,它支持开发基于流程的应用程序.它 ...

  6. java:容器/集合Collection(List(ArrayList,LinkedList,Vector),Set(HashSet(LinkedHashSet),TreeSet))

    /** * Collection接口  不唯一,无序 * 常用的方法: * add(Object e) 确保此 collection 包含指定的元素(可选操作). * size():获取集合中元素的个 ...

  7. 【Python开发】【神经网络与深度学习】网络爬虫之图片自动下载器

    python爬虫实战--图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识(没看的赶紧去看)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk is cheap show ...

  8. VMware下的Centos7联网并设置固定IP(nat)

    命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33 如下图所示,加上这四行内容. IPADDR 需要是和网关在同一网段 GATEWAY 参考在虚拟机的na ...

  9. ocelot集成consul服务发现

    首先下载consul 点击这里下载 转到解压文件夹目录输入cmd命令  consul agent -dev (有时候会卡住按一下方向键上) 在浏览器中输入http://localhost:8500/u ...

  10. 关于Tomcat配置问题

    一,部署并启动Tomcat服务器 Tomcat: 开源的 Servlet 容器. 解压 apache-tomcat-6.0.16.zip 到一个非中文目录下 配置一个环境变量. java_home(指 ...