Android基础知识-1
1、Android的Activity任务栈
在Android的系统中,在APP运行时每个APP都会默认有一个任务栈,任务栈的名称以APP的包名命名。任务栈是一中先进后出的结构,APP中每一个调用的Activity均会按照先后顺序进栈,处于焦点下的Activity处于任务栈的栈顶。
当用户按back键时,栈内的Activities会按照先后顺序出栈,并调用该Activity的OnDestroy方法。如果栈内已经没有元素时,系统会回收该APP的任务栈。
在Activity的的xml标签中,可以定义每个Activity的模式。不同的模式在任务栈中调用时的表现也是不同的:
- standard模式:标准模式。在该模式下,每次启动的Activity都会创建一个实例将其压入任务栈中,不管此时该Activity是否已经存在。
- singleTop模式:栈顶复用模式。如果当前启动的Activity此时恰好处于任务栈栈顶的位置,那么就会复用该Activity。此时不会重新执行Activity的OnCreate、OnStart和OnResume方法,但是会执行OnNewIntent()方法。如果该Activity不在栈顶位置,则与standard模式一样。
- singleTask模式:栈内复用模式。比较霸道的一种模式,当Activity启动时会判断当前栈内是否已经存在。如果不存在,先创建该Activity实例并将其压入任务栈内。如果存在,则会将该Activity上面的所有Activity清除掉,将该Activity调到栈顶位置,调用OnNewIntent方法。
- singleInstance模式:加强版的singleTask模式,这个模式下的Activity处于一个单独的任务栈内,除非所在的任务栈被销毁,否则不会创建新的Activity。
Activity的堆栈管理以ActivityRecord为单位,所有的ActivityRecord都放在一个List里面.可以认为一个ActivityRecord就是一个Activity任务栈。
2、Activity的缓存
为什么要有Activity的缓存?举个栗子:当应用从Activity A进入到Activity B后的一段时间后,A的资源被系统回收。当你从B按back键要回到A时,前一次A的数据和状态都已经丢失,此时不会执行A的OnRestart方法,而是重新执行了A
的OnCreate方法。 So,Activity的缓存就有了存在的价值。
Activity有一个封装好的方法:onSaveInstanceState() 。当Activity被销毁之前,该方法会被回调用以保存Activity的状态和数据。该方法有个Bundle参数,方法中可以使用putString() 、putInt()方法保存需要保存的参数。在Activity启动调用
OnCreate方法时,也有一个Bundle参数,该参数就是上次Activity销毁时保存下来的数据。
那么有哪些场景会触发onSaveInstanceState()方法呢?答案是非用户主动销毁的动作那么该方法就都会被调用。
- 用户按HOME键的动作
- 切换到其他应用
- 灭屏时
- 从当前的Activity进入另一个Activity
- 如果不设定configchange属性,屏幕横竖屏切换也会,因为横竖屏切换时系统会先销毁当前Activity,然后在切换后再重新创建。
还有一些细节知识:
- UI布局中的每一个View都默认实现了onSaveInstanceState()方法,这意味着UI界面的每一个改动都会被存储并在Activity重建时恢复。这有一个前提,那就是这个UI界面需要一个ID,如果没有ID,前面的实现都不会被调用。
- onSaveInstanceState()方法调用有不确定性,只能用这个方法去记录activity的瞬间状态(UI的状态)。不能用这个方法去存储持久化数据。当用户离开这个activity的时候应该在onPause()方法中存储持久化数据(例如应该被存储到数据库中的数据)。
- onSaveInstanceState()如果被调用,那么一定是在onStop()前被触发,但每次不一定是在onPause()之前或者之后触发。
明天继续~
Android基础知识-1的更多相关文章
- 【Xamarin开发 Android 系列 4】 Android 基础知识
原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...
- Android基础知识巩固:关于PendingIntent和广播
平时使用广播的场合比较多,但细节的东西,看过了也没有总结,以至于某些场合有小问题,还是要把原理和属性搞清楚才能运用自如. 其实也是自己比较懒,先看别人的blog,有个概念再去官网看英文的能好理解一些. ...
- Android基础知识(一)
前言 前言 从软件测试最终目的发现问题缺陷来看,Findyou比较认同一个观念,测试的能力大致可以划分成三个能力层次:发现问题.定位问题.预防问题.有机会探讨一下这个分类. 发现问题各种方式方法,比如 ...
- android开发学习---linux下开发环境的搭建&& android基础知识介绍
一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- 看看android基础知识,谁帮我作答
无论怎么着,了解一点android的基本知识还是有必要的,就当开阔一些自己的眼界吧. .. . android的四大功能组件是_activity_,_service_,_BroadcastReceiv ...
- Android基础知识学习
IPC (Inter-Process Communication) 意思是: 进程间的通信,是指两个进程之间进行数据交换的过程. Android中如何开启多进程呢? 只需要给四大组件(Activit ...
- Android基础知识之Manifest文件的组织结构
原文:http://android.eoe.cn/topic/android_sdk 是AndroidManifest.xml文件中的根标签,她必须包含一个标签和指定的xmlns:android. p ...
- Android基础知识之拼写检查框架
原文:http://android.eoe.cn/topic/android_sdk 拼写检查器框架 Android平台提供了一个拼写检查器的框架,来方便你在你的应用中实现并使用拼写检查.这个框架是A ...
- android基础知识:SharedPreferences和PreferenceActivity
1.android文件存储 对Android系统了解的都知道,Android系统有四种基本的数据保存方法,一是SharedPreference,二是文件,三是SQLite,四是ContentProvi ...
随机推荐
- 经历:asp.net oracle 部署问题以及解决方法
原文:[原创]经历:asp.net oracle 部署问题以及解决方法 精简的美丽...... 一.环境 开发环境 win7 64bit Vs2010 ...
- .NET MVC4 实训记录之七(实现资源的自主访问后续)
我们在上一篇中讨论了如何利用ModelMetadata实现国际化资源文件访问,但也留下了一些问题,即:如何利用ModelMetadata实现相同类型的属性信息的个性化资源显示.本人没有找到合适的方案, ...
- status状态栏实现字符串走动
<script type="text/javascript" language="javascript"> var i = 0; var str=& ...
- zxing二维码扫描的流程简析(Android版)
目前市面上二维码的扫描似乎用开源google的zxing比较多,接下去以2.2版本做一个简析吧,勿喷... 下载下来后定位两个文件夹,core和android,core是一些核心的库,android是 ...
- 使用EasyUI的树控件构建Web界面
最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开发框架保持一致,而在Web上,我主要采用EasyUI的前端界面处理技术,走MVC的技术路线,在重 ...
- JQuery UI Layout Plug-in布局
端]使用JQuery UI Layout Plug-in布局 引言 使用JQuery UI Layout Plug-in布局框架实现快速布局,用起来还是挺方便的,稍微研究了一下,就能上手,关于该布 ...
- WisDom .net开发框架设计 2
随笔- 10 文章- 0 评论- 57 WisDom .net开发框架设计 (二) WisDom .net 权限设计 1.前言 几乎在所有的管理的系统,都离不开用户,角色,权 ...
- Identity
ThreadStatic应用(Identity补完) 关于Identity Identity自增序列/唯一断标识 起初做这个东西,是在一个内部组件中,用于在高并发的环境下得到一个较短的“相对”不重 ...
- 应用facebook .net sdk
1.本博客主要介绍如何应用facebook .net SDK,实现发帖.点赞.上传照片视频等功能,更多关于facebook API,请参考:https://developers.facebook.co ...
- YPreLoad
Javascript库 发布我的控件系列:图片预加载控件YPreLoad v1.0 摘要: 介绍大家好!很高兴向大家介绍我的图片预加载控件YPreLoad.它可以帮助您预加载图片,并且能显示加载的 ...