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 ...
随机推荐
- Java 异常归纳总结
1.异常的分类 1) Checked exception: 这类异常都是Exception的子类 .异常的向上抛出机制进行处理,如果子类可能产生A异常,那么在父类中也必须throws A异常.可能导致 ...
- uva 11181 - Probability|Given
条件概率公式:P( A|B ) = P( AB ) / P( B ) 表示在事件B发生的前提,事件A发生的可能性: 问题的: 复位事件E:r个人买东西: 事件Ei:文章i个人买东西: 的要求是P( E ...
- 我的Android 4 学习系列之文件、保存状态和首选项
目录 使用Shared Preference 保留简单的应用程序数据 保存回话间的Activity实例数据 管理应用程序首选项和创建Preference Screen 保存并加载文件以及管理本地文件系 ...
- Android项目--tabhost
所有牵扯到自定义布局的layout中尽量用RelativeLayout 在通讯录中如果像小米手机的UI那就是viewpager,在这里,我们做成静态的.通过tabhost来做. 1.布局 a) 直接用 ...
- Linq无聊练习系列7----Insert,delete,update,attach操作练习
/*********************Insert,delete,update,attach操作练习**********************************/ ...
- 实现WebService的调用与被调用
之前一直用WCF来开发服务,可是从未用过WebService.对WebService有种很神奇的期待,都说WebService比较简单,但是从未用过就对我来说就是一种新的知识.起始让我来说WCF与We ...
- Coursera台大机器学习基础课程1
Coursera台大机器学习基础课程学习笔记 -- 1 最近在跟台大的这个课程,觉得不错,想把学习笔记发出来跟大家分享下,有错误希望大家指正. 一 机器学习是什么? 感觉和 Tom M. Mitche ...
- IIS配置PHP环境
IIS配置PHP环境(快速最新版)(转载+自创) (参考转载的) 我们知道php配置有几种: 1.CGI方式加载PHP环境,通常就是IIS里面配置解释器为php.exe,早期比较常见,目前使用较少. ...
- [转]Top 10 DTrace scripts for Mac OS X
org link: http://dtrace.org/blogs/brendan/2011/10/10/top-10-dtrace-scripts-for-mac-os-x/ Top 10 DTra ...
- JS自动刷新页面一次
<script type="text/javascript"> //刷新页面 if(location.href.indexOf("refresh=1" ...