Android四大组件之Activity
- 前言
- 一、Activity的形态
- 二、Activity的生命周期
- 三、Android的4种加载模式
- Intent Flag启动模式
- 四、Activity间传递信息
- Intent
- 五、Activity现场保存状态
- 参考资料
前言
Activity是Android中最常见的,也是最重要的应用组件,是提供用户完成指令的窗口。调用setContentView(View)方法来指定一个显示的界面,并采用Activity栈的方式来管理Activity。建立自己的Activity需要继承Activity基类。基类的种类有以下这些
一、Activity的形态
Activity拥有多种形态,在多种形态将进行切换,以此控制自己的生命周期
Activity/Running (运行状态)
处于Activity栈的最顶层,处于前台进程,与用户进行交互Paused (暂停状态)
Activity失去焦点,处于可视进程。被一个非全屏的Activity或者透明的Activity放置在栈顶,Activity转化为Paused形态,失去与用户交互能力,所有状态信息成员变量仍保持,内存极低时被系统回收Stopped (停止状态)
被另一个Activity完全覆盖,进入Stopped形态,不可见,所有状态信息成员变量仍保持。处于后台进程Killed (销毁状态)
Activity被系统回收或者Activity从未被创建过。
二、Activity的生命周期
·
群英传中有说,Android的生命状态中有三个状态是稳定(Resumed、Paused、Stopped),其他状态是过渡状态
- onCreate(Bundle savedStatedStatus)
创建Activity时被回调,只会被调用一次 - onStart()
启动Activity时被回调 onRestart()
重新启动时回调,也就是activity调用onStop()后,由后台进程转到前台进程,Activity再次变得可见时回调onResume()
onStart()后一定会调用onResume()。另外,当Activity调用onPaused()后,也就是处于可视进程,转到前台进程时调用onResume()onPaused()
暂停Activity时调用,也就是由前台进程转化为可视进程。另外提一点, 记录资源状态信息往往是在该方法中实现onStop()
Activity变为完全不可见,处于后台进程onDestroy()
Activity被销毁时调用,只会调用一次
三、Android的4种加载模式
Android采用Task管理多个Activity,一个App启动时,如果当前系统不存在该App的任务栈Task,则系统会创建一个Task,然后启动这个应用的第一个Activity,第一个Activity需要AndroidMainnifest中配置一下信息
<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
正常情况中栈采用后进先出(Last In First Out)方式,先启动的Activity放在栈底,后启动的Activity放在栈顶。但我们可以采用不同的启动模式来打破这种情况。在AndroidMainifest文件中android:launchMode或Intent的flag设置不同的加载模式
standard模式
默认的启动模式,每次为目标Activity创建一个新的实例,并置于栈顶。该模式不会启动新的TasksingleTop模式
当将要启动的Activity已经位于栈顶时,系统不会重新创建一个新的目标Activity实例,而是直接复用已有的Activity实例,但如果目标Activity没有位于栈顶,则创建一个新的实例,与standard模式一致singleTask模式
Task中只含目标Activity唯一的一个实例,采用singleTask模式,系统检测栈中是否存在当前需要启动的Activity,如果存在,将目标Activity实例以上的Activity实例全部销毁,将目标Activity实例置于栈顶。
有趣的是,启动的目标Activity实例已经存在于另一个Task中时,启动后,存在目标Activity实例的Task将一并切换到前台。如图
- singleInstance
采用该模式的Activity,启动它时会重新创建一个Task,并且该栈只包含该Activity。
另外,当应用A启动了该Activity实例,如果应用B也要调用该Activity,则无须创建,两个应用共享该实例,常用于需要与程序分离的界面。
Intent Flag启动模式
FLAG_ACTIVITY_NEW_TASK
使用一个新的Task来启动Activity,通常用于Service中启动,因为Service不存于Activity栈中FLAG_ACTIVITY_SINGLE_TOP
与 android:launchMode=”singleTop” 效果一致FLAG_ACTIVITY_CLEAR_TOP
与 android:launchMode=”singleTask” 效果一致FLAG_ACTIVITY_NO_HISTORY
当该Activity启动其他Activity后,该Activity消失FLAG_ACTIVITY_CLEAR_TASK
这个标记,将会导致任何用来放置该activity的已经存在的task里面的已经存在的activity先清空,然后该activity再在该task中启动,也就是说,这个新启动的activity变为了这个空task的根activity.所有老的activity都结束掉。该标志必须和FLAG_ACTIVITY_NEW_TASK一起使用。
四、Activity间传递信息
Activity之间的通信是必不可少的一部分,常用的通信方式有以下几种
- Intent
静态变量:适用于不可序列化的且简单的对象
全局变量 及Application
Android系统剪切板
本地化存储方式
- SharedPreference
- SQLite
- File
onActivityResult回调监听
通过重写该方法获取数据Andorid组件
- Broadcast方式
- Service方式
EventBus
EventBus 是一款针对Android的发布以及订阅事件总线,使用它可以很方便的进行信息传递
Intent
是目前最常见的信息传递方式,Intent 即意图:当一个Activity需要启动另一个Activity时,程序并没有直接告诉系统需要启动哪个Activity,而是通过Intent表达自己的意图。
通过Intent.putExtra方法可以将简单数据类型或可序列化对象保存在Intent对象中,然后在另一个Activity中使用getInt、getString等方法获得这些数据
Intent可传递的数据类型
8中基本数据类型及其数组
String(String实现了Serializable)/CharSequence实例类型的数据及其数组
实现了Plarcelable的对象及其数组
实现了Serializable的对象及其数组(File在Java里也是类,在Android中实现了Serializable接口)
五、Activity现场保存状态
Activity调用了onPause和onStop()的进程仍然会保存在内存当中,但内存不足时,它所在的线程仍然会被终止。因此我们需要考虑保存Activity所有信息和状态,一般会采用两种方法实现
onPause()
若向数据库中插入记录等,保存持久化数据的操作,适用于调用onPause()方法的时候实现onSaveInstanceState()
该方法适合保存瞬态数据, 比如UI控件的状态, 成员变量的值等
onSaveInstanceState()方法接受一个Bundle类型的参数, 开发者可以将状态数据存储到这个Bundle对象中,以保证该状态在onCreate(Bundle)或者onRestoreInstanceState(Bundle)(传入的Bundle参数是由onSaveInstanceState封装好的)中恢复。
执行顺序:在当前Activity被销毁之前会调用onSaveInstanceState,然后销毁当前Activity,创建新的Activity之后会调用onCreat方法之后会紧接着调用onRestoreInstanceState
参考资料
Android Activity原理以及其子类描述
Activity详细总结
Android群英传(徐宜生·著)
Android 消息通信之Activity间消息传递
Android四大组件之Activity相关推荐
- Android四大组件之——Activity的生命周期(图文详解)
转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai 联系方式:JohnTsai.Work@gmail.com [Andro ...
- Android四大组件之Activity(第一篇-简单使用)
Android四大组件之Activity(第一篇-简单使用) 前言 一.Activity是什么? 二.如何使用 1.继承 2.重写onCreate() 总结 文章目录 前言 一.Activity是什么 ...
- 重温Android四大组件(一)—Activity的生命周期
前言 四大组件对于Android开发者是老生常谈的知识了,相信每个Android开发者对四大组件都已经很熟悉了.但是四大组件作为Android应用的基础,作为开发者不仅要熟悉而且要烂熟于心. 这里以& ...
- 第六课-Android四大组件之Activity
Activity是Android四大组件之一,它是个控制类,主要控制界面的加载显示,用户交互处理,数据的获取,数据的传送等.在它的onCreate方法中的setContentView方法就是来加载一个 ...
- Android四大组件之——Activity(一)定义、状态和后退栈(图文详解)
什么是Activity 关键字:应用组件.四大组件.用户界面,交互. An Activity is an application component that provides a screen wi ...
- 【Android 四大组件之Activity】一文吃透Activity 生命周期
作者:半身风雪 简介:在Android组件中最基本也是最为常见的四大组件: Activity Service服务 Content Provider内容提供者 BroadcastReceiver广播接收 ...
- android 4大组件相互启动,Android四大组件之Activity
1.感性的认知Activity Activity是安卓的四大组件之一,它就像是一个容器,容器当中装了很多的Android布局,这些布局可以直接写在Activity所引用的xml布局文件当中,也可以通过 ...
- Android 四大组件之 Activity
什么是 Activity? Activity 是 Android 的四大组件之一,是用户操作的可视化界面,它为用户提供了一个完成操作指令的窗口. 当我们创建完 Activity 之后,需要调用 set ...
- android四大组件之Activity(三)
这是一篇关于android开发四大组件Activity部分的笔记之一,其中主要介绍Activity的生命周期以及一些实例等内容.这里所用到的开发工具是Android4.1. 目录 14.Activit ...
- Android四大组件之Activity(intent、ActivityThread)
Activity 在Android的程序当中,Activity 一般代表手机屏幕的一屏.如果把手机比作一个浏览器,那么Activity就相当于一个网页.在Activity 当中可以添加一些Button ...
最新文章
- 调整数组顺序使奇数位于偶数的前面
- 【错误记录】Android Studio 编译报错 ( Cannot use connection to Gradle distribution . as it has been stopped. )
- 剑指offer之【调整数组顺序使奇数位于偶数前面】
- 关于VS无法启动程序,系统找不到指定的路径,最标准的回答
- 电中在线计算机应用基础二考试题目及答案,最新电大2015计算机应用基础作业2 答案.doc...
- 明日之后怎么跳过实名认证_明日之后宝箱达人活动怎么玩 明日之后宝箱达人可以开箱多少次...
- Acquiring lock on /*/*/.vscode-server/bin/f80445acd5a3dadef24aa20916 vscode远程linux 服务器无法建立连接
- 2013江苏计算机二级vfp试题,2013年3月全国计算机二级VFP真题
- 苹果首席芯片设计师离职 曾领导自A7以来所有芯片设计
- 部署和操作 Enterprise Library 加密应用程序块
- 求助,WIN10系统,我的推特用不了,提示网络没连接,其实我网络是好的,求大神指点,万分感谢!
- HTTP的SSL 证书安装
- 软考中级-软件设计师知识点与例题-1、计算机组成与结构
- 什么是期权股权?什么是期权股权原始股?
- MeanShift算法理解
- NLP 基础应用研究方向简介
- Ubuntu搭建团队文档协作在线平台
- vue组件通信(传值)
- LeetCode中等题之分数加减运算
- ATI显卡配置aticonfig和amdcccle全解
热门文章
- 从零实现一个在线相亲APP(缓解相亲尴尬的神器)
- decimal.TryParse int.TryParse DateTime.TryParse
- UBUNTU若干加速方法
- python中的元组和列表的核心区别
- 直播行业的未来增量:一边内容升级,一边驱动演艺
- c语言字体读取方式,请教文字识别与图象识别的方法
- 基于matlab人脸识别论文,毕业论文--基于MATLAB的人脸识别系统设计
- Unity官方案例同步学习-学习日记(二)——敌人AI寻路思路设计和部分方法
- [HTMLDOM]onmousedown、onmouseup 以及onclick事件触发顺序
- 使用vue-cli创建uni-app项目