内容来源: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. LeetCode 516——最长回文子序列

    1. 题目 2. 解答 与最长回文子串类似,我们可以用动态规划来求解这个问题,只不过这里的子序列可以不连续.我们定义状态 state[i][j] 表示子串 s[i, j] 的最长回文子序列长度,那么状 ...

  2. 浏览器端-W3School-HTML:HTML DOM Area 对象

    ylbtech-浏览器端-W3School-HTML:HTML DOM Area 对象 1.返回顶部 1. HTML DOM Area 对象 Area 对象 Area 对象代表图像映射的一个区域(图像 ...

  3. opensatck误删除service项目

    由于在清除资源时,未考虑到租户service,将其一并删除,于是有了下面的填坑之旅 1,需要找到删除的services-id,查看keytone的log, grep -r "DELETE&q ...

  4. Selenium 2自动化测试实战21【调用JavaScript(控制浏览器的滚动条)】

     一.调用JavaScript(控制浏览器的滚动条) WebDriver提供了execute_script()方法来执行JavaScript代码.用于调整浏览器滚动条位置的JavaScript代码如下 ...

  5. Nginx搭建动态静态服务器

    Nginx做静态资源服务器优于Tomcat 区分静态资源,动态资源请求 使用域名区分! 如果是动态资源请求  反向代理到 Tomcat 如果 是静态资源请求  直接走本地Nginx 配置: ###静态 ...

  6. Oracle 笔记(一)

    Oracle基本理论 l  主流数据库 微软公司:SQL Server  ACCESS IBM公司:DB2  infomix Oracle公司:Oracle  MySQL(AB公司) 小型数据库 AC ...

  7. Capabilities 入门教程:基础实战篇

    该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 待续... 上篇文章介绍了 Linux capabilit ...

  8. 【生成树趣题】CF723F st-Spanning Tree

    题目传送门 题意: 给定一个n个点m条边的无向联通图,没有重边和自环.给定s和t,求一棵生成树,使得s,t的度数不超过ds,dt.若有解,输出“Yes”和方案(多组方案输出任意一组),若无解,输出“N ...

  9. 【Python开发】【神经网络与深度学习】网络爬虫之python实现

    一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛. 网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一 ...

  10. Dialupass v3.20 汉化绿色版 显示查看拨号上网密码

    Dialupass 显示查看拨号上网密码 拨号上网的密码不小心丢了怎么办?这个工具可以帮你!在紧要关头,它会让你体验到它的奇效!有备无患,快收藏这个小东东吧. 这是一款拯救忘记了拨号网络密码的使用者的 ...