Android开发艺术探索笔记之Activity
内容来源:Android开发艺术探索第一章:Activity的生命周期与启动模式
不能在onPause中做重量级的操作,因为必须执行完成以后新Activity才能Resume。onPause和onStop都不能执行耗时的操作,尤其是onPause.这就意味着,我们应当尽量在onStop中做操作,而使得新Activity尽快显示出来并切换到前台。
onSaveInstanceState和onRestoreInstanceState:Android保存数据的机制。Activity被销毁后调用onSaveInstanceState来保存数据,重新创建时在onCreate和onRestoreInstanceState中恢复存储的数据。 系统只在Activity异常终止的时候才会调用onSaveInstanceState和onRestoreInstanceState来存储和恢复数据,其他情况不会触发这个过程。如Activity正常销毁时不会触发。
当系统配置改变后(如横竖屏切换),Activity会重新创建。若要不让它重新创建,可以给Activity指定configChanges属性。如
android:configChanges="orientation",设置屏幕旋转时Activity不重新创建。| 号可连接多个值,如
android:configChanges="orientation|keyboardHidden"Activity的LaunchMode
- standard : 标准模式,系统的默认模式。Context类型启动standard模式的Activity会报错。因为standard模式的Activity默认会进入启动它的Activity所属任务栈中,而非Activity类型的Context并没有任务栈。故需为待启动的Activity指定FLAG_ACTIVITY_NEW_TASK标志位,以使启动时候为它创建一个新的任务栈。
- singleTop : 栈顶复用模式。若新Activity已经位于任务栈的栈顶,则此Activity不会被重新创建。onNewIntent方法会被回调。
- singleTask : 栈内复用模式。只要Activity在一个栈中存在,则多次启动该Activity都不会重新创建实例。设Activity为A,启动时,先寻找是否存在A所想要的任务栈,若不存在,创建新任务栈并把A实例放入栈中。若存在A所需的任务栈,则看A在任务栈中,是否已经有实例存在,若有实例存在,则将A调到栈顶并调用onNewIntent方法。若无实例存在,则创建实例压入栈中。此外,singleTask默认具有clearTop效果,即任务栈S1,情况为ADBC,启动D,则D上面的Activity全部出栈,此时S1:AD。
- singleIntance : 单实例模式。加强的singleTask,具备singleTask所有特性,还特殊的,此种模式的Activity都单独位于一个任务栈中。此种模式的Activity A启动后,会创建一个新的任务栈,A独自在该Activity中,由于栈内复用的特性,后续请求都将不会创建新的Activity,除非这个独特的任务栈被系统销毁了。
给Activity指定启动模式
- 方式一:通过AndroidManifest指定
android:launchMode="singleTask" 方式二:在Intent中设置标志位
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)区别:优先级方式二高于方式一;限定范围不同。
- 方式一:通过AndroidManifest指定
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的更多相关文章
- Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...
- Android开发艺术探索笔记——View(二)
Android开发艺术探索笔记--View(二) View的事件分发机制 学习资料: 1.Understanding Android Input Touch Events System Framewo ...
- Android开发艺术探索笔记—— View(一)
Android开发艺术探索笔记 --View(一) View的基础知识 什么是View View是Android中所有控件的基类.是一种界面层控件的抽象. View的位置参数 参数名 获取方式 含义 ...
- ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记
原文链接 http://sparkyuan.me/ 转载请注明出处 View的绘制流程是从ViewRoot的performTraversals方法開始的.它经过measure.layout和draw三 ...
- Android中View的事件分发机制——Android开发艺术探索笔记
原文链接 http://sparkyuan.me/ 转载请注明出处 介绍 点击事件的事件分发就是对MotionEvent事件的分发过程.当一个MotionEvent产生了以后,系统须要把这个事件传递给 ...
- Android开发艺术探索读书笔记——01 Activity的生命周期
http://www.cnblogs.com/csonezp/p/5121142.html 新买了一本书,<Android开发艺术探索>.这本书算是一本进阶书籍,适合有一定安卓开发基础,做 ...
- 《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化
第13章 综合技术 13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢?利用Thread类的set ...
- 《Android开发艺术探索》读书笔记 (9) 第9章 四大组件的工作过程
第9章 四大组件的工作过程 9.1 四大组件的运行状态 (1)四大组件中只有BroadcastReceiver既可以在AndroidManifest文件中注册,也可以在代码中注册,其他三个组件都必须在 ...
- 《android开发艺术探索》读书笔记(十五)--Android性能优化
接上篇<android开发艺术探索>读书笔记(十四)--JNI和NDK编程 No1: 如果<include>制定了这个id属性,同时被包含的布局文件的根元素也制定了id属性,那 ...
随机推荐
- Activity 怎么和 Service 绑定,怎么在 Activity 中启动自己对应的 Service?
Activity 通过 bindService(Intent service, ServiceConnection conn, int flags)跟 Service 进行绑定,当绑定成功的时候 Se ...
- linux 下的快捷键操作
概述 今天发现自己码代码的效率有点低,所以查找了一下 linux 常用的快捷键操作,记录下来,供以后开发时参考,相信对其他人也有用. linux 终端常用快捷键 tab:补全命令 Ctrl + u:剪 ...
- Android 动态申请权限
AndroidManifest.xml(清单文件)添加需要的权限 <uses-permission android:name="android.permission.ACCESS_CO ...
- Linux环境Nginx安装
开始前,请确认gcc g++开发类库是否装好,默认已经安装. ububtu平台编译环境可以使用以下指令 apt-get install build-essential apt-get install ...
- 三十:数据库之定义ORM模型,并映射到数据库
连接数据库操作 sqlalchemy映射步骤: 1.创建ORM模型,这个模型必须继承sqlalchemy提供的基类2.在这个ORM模型中创建一些属性,与表中的字段一一映射,这些属性必须是sqlalch ...
- oracle系统视图V$
--数据字典表select * from v$fixed_table;select * from v$fixed_view_definition;select * from dictionary; - ...
- 用Node开发桌面应用:NW.js和Electron
NW.js和Electron对比:[http://tangiblejs.com/posts/nw-js-electron-compared] NW.js:[https://nwjs.io/] Elec ...
- HtML5与CSS3基础
HTML标签 1.<a></a> 超链接标签 属性 href:跳转页面的连接 name:实现定锚功能,跳转同一页面不同位置(例返回顶部) target: (self, pare ...
- https原理以及golang基本实现
关于https 背景知识 密码学的一些基本知识 大致上分为两类,基于key的加密算法与不基于key的加密算法.现在的算法基本都是基于key的,key就以一串随机数数,更换了key之后,算法还可以继续使 ...
- Angular5 tslint错误:The selector of the component “XXXComponent” should be used as element
错误描述 在项目中自己封装了一个 select 组件 @Component({ selector: '[app-choosen-select]', templateUrl: './selectcomm ...