内容来源: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. [Python]if语句的练习

    习题: 小明身高1.75,体重80.5kg.请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数:低于18.5:过轻 18.5-25:正常 25-28:过重 28-32:肥 ...

  2. 批量生成xml文件数据C#实现

    方法一 // < Records count = "5" > //< Record > // < Contact_ID > 5 - 55W - ...

  3. lnmp 环境下 部署 laravel 项目

    出现错误 Warning: require(): open_basedir restriction in effect. File(/xxxx/vendor/autoload.php) is not ...

  4. 使用vue做项目如何提高代码效率

    最近做了两个vue项目,算上之前做的两个项目,总共有四个vue项目的经验了,但是总体来说写的代码质量不是很高,体现在以下几点 1.代码没有高效的复用 自从使用vue做项目之后,以前使用面向过程变成的习 ...

  5. 【JAVA系列】Google爬虫如何抓取JavaScript的?

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[JAVA系列]Google爬虫如何抓取Java ...

  6. python根据文本生成词云图

    python根据文本生成词云图 效果 代码 from wordcloud import WordCloud import codecs import jieba #import jieba.analy ...

  7. Codeforces 1220C. Substring Game in the Lesson

    传送门 首先显然的,如果 $l$ 能移动,那么 $r$ 一定可以随便移动,如果 $l$ 不动,那么 $r$ 一定不能动 那么我们现在只要考虑 $l$ 的移动即可 考虑找到位置 $k$ 之前的最左边的最 ...

  8. Inversions After Shuffle CodeForces - 749E (概率,期望)

    大意: 给定一个$n$排列, 随机选一个区间, 求将区间随机重排后整个序列的逆序对期望. 考虑对区间$[l,r]$重排后逆序对的变化, 显然只有区间[l,r]内部会发生改变 而长为$k$的随机排列期望 ...

  9. java CAS和AQS

    全面了解Java中的CAS机制 https://www.jb51.net/article/125232.htm https://www.cnblogs.com/javalyy/p/8882172.ht ...

  10. alembic 实践操作

    1. alembic [--config */alembic.ini ] current 2. alembic revision -m "add columns" 编辑生产的模板文 ...