一、Activity的基本概念
概念:代表一个可以进行任务交互的窗口界面。可包含多层级的View和ViewGroup。
创建:继承一个Activity或着它已存在的子类。必须实现onCreate()方法,调用setContentView()来加载用户交互的布局。并在AndroidManifest.xml的<application>中配置一个<activity>的节点,指明android:name属性。
启动一个Activity:
(1)启动主Activity。清单文件配置“MAIN”action和“LAUNCHER”category。
(2)启动普通Activity使用intent。一般调用startActivity(),包含两种方式,显示和隐示意图。显示是指intent指明要启动的Activity名称,隐示是不指定具体的Activity,只描述一下intent的Action,或加上data等,让系统过滤intent-filter来挑选最合适的Activity。
(3)需要从启动的Activity中获取一个结果。用startActivityForResult()来启动Activity,需指明intent和requestCode,然后实现onActivityResult()回调接口来获取返回后的结果。onActivityResult()中需判断resultCode是否是成功返回,通过requestCode来判断是否响应的是指定的请求。
二、Activity的生命周期管理
为什么要管理生命周期,Activity是应用程序的主体,是用户体验的第一道窗口(所见),当然至关重要。这里的原则通常来说有以下几点需要遵循:
  1. 当使用你的app的时候,不会因为屏幕切换而导致程序crash(来电、闹铃、其它程序、旋转屏幕);
  2. 当用户没有使用或不需要某些组件的时候不要浪费宝贵的系统资源;
  3. 不会因为离开当前app一段时间而导致某些至关重要的用户使用进度丢失。
  4. ... ... ...
怎么管理,通过实现Activity生命各阶段的回调方法来管理。下面是一幅activity的回调方法和对于生命状态图:
其中只有三种状态是静态的,Activity可以再这三种状态上保持很长时间,其它状态会很快地切换掉,停留时间短。
  • Resumed:也称为runing状态,Activity在最前端,可捕获焦点,与之交互。
  • Paused:Activity被另外一个activity半遮盖(另外一个activity是半透明或只遮住屏幕一部分,总之Paused状态的Activity对用户是可见但不可操作的)
  • Stoped:Activity被完全隐藏,不被用户可见,
各个回调方法的常用操作:
onCreate():设置layout,定义成员变量,配置UI元素等,(尽量少做事情,不然等待activity显示的时间太长)
onRestart():上次Stopped后但未被重新启动该Activity。
onStart():继续维持你在activity里需要显示的资源,也可根据情况管理它们,或者注册广播等(时间也别长)
onResume():你在onPause()里需要释放什么,就要在这儿恢复什么
onPause():停止动画或其它导致CPU浪费的操作,释放一下资源,比如sencor、Camera等。为避免进入下一个activity时间太长,这个回调函数尽量别做CPU耗时的操作,具体原因参见下面activityA-->B的回调执行流程。
onStop():这儿可以把需要的数据存储到持久化存储(File、DB 等)
onDestroy():释放掉不需要的当前Activity用到的一切资源,比如子线程,cursor等。
另外两个重要方法:
onSaveInstanceState() :一旦Activity进入非前台进程,即离开resumed状态(runing状态),都是有可能在极端情况下因系统内存不足导致该程序进程被杀死,所以如果我们需要保存该Activity UI上需要的一些信息,以便下次创建该Activity时重新使用这些信息(在Bundle里),我们便可以在onSaveInstanceState()里put需要的值进bundle。
onRestoreInstanceState():如果启动的Activity上次是被意外强制关闭,且需要恢复上次的使用进度值,用此回调实现。
从ActivityA启动ActivityB回调函数执行流程:(以下讨论activity的launchMode为standard)
从ActivityB 按返回键返回 ActivityA:
旋转屏幕ActivityA:
如果不想要重新create activity,可以在AndroidManifest.xml里配置<activity>里加上如下配置。
android:configChanges="orientation|screenSize|keyboardHidden"
三、Activity的四种启动模式及应用场景
启动模式的设置:
<activity android:name=".MainActivity" android:launchMode="standard" />
也可以在startActivity()的时候可用给Intent加相应的标志位FLAG_ACTIVITY_***。
四种启动模式:
  • standard

标准启动模式,每次激活一个Activity时都会创建一个该Activity的实例(哪怕是自己),并放入任务栈中。

  • singleTop

如果任务栈栈顶正好存在该Activity的实例,就重用该实例。(仅限于栈顶,重用时会调onNewIntent()

  • singleTask

整个任务栈只能有一个该Activity的实例,如果在栈中已经存在该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

  • singleInstance

在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中

应用场景:
默认值是standard,具体情况具体分析,但要确保Activity的可用性测试,包括启动过程,和其它Activity交互过程,返回键Home键等等,
四、其它
1、关于<activity>在AndroidManifest.xml中的配置属性的中文介绍
参考这位博主的博客:http://www.cnblogs.com/popapa/p/android_activity-element.html
2、Activity弹出Toast或者Dialog不会引起生命周期的变化。

转载于:https://www.cnblogs.com/ddd2014/p/4305124.html

[01] 四大组件之Activity相关推荐

  1. 安卓入门系列-08四大组件之Activity

    Activity详解 什么是Activity Android提供的四大组件(activity.service.contentprovider.broadcast receiver)之一.它是一个界面的 ...

  2. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  3. Android实训课程之三 这次课老师先是提到了Android有四大组件:Activity、Service、Broadcast Receiver、Content Provider。然后重点提到Acti

    Android实训课程之三 这次课老师先是提到了Android有四大组件:Activity.Service.BroadcastReceiver.ContentProvider.然后重点提到Activi ...

  4. Android四大组件之Activity(第一篇-简单使用)

    Android四大组件之Activity(第一篇-简单使用) 前言 一.Activity是什么? 二.如何使用 1.继承 2.重写onCreate() 总结 文章目录 前言 一.Activity是什么 ...

  5. Android基础再回首——四大组件之Activity、Service俩兄弟

    Android基础再回首--四大组件之Activity.Service俩兄弟 偶尔的回首过去,总是有不一样的收获.今天就来回顾下Activity和service吧,不用嫌弃太基础了,打好基础是取得成功 ...

  6. 【Android 四大组件之Activity】一文吃透Activity 生命周期

    作者:半身风雪 简介:在Android组件中最基本也是最为常见的四大组件: Activity Service服务 Content Provider内容提供者 BroadcastReceiver广播接收 ...

  7. 第一章 四大组件 之 Activity(一)

    文章目录 第一组件 Activity (一)Activity生命周期 1.生命周期五大状态 2.生命周期流程 3.常见场景的生命周期调用方式 4.具体场景生命周期调用方式 (1)横竖屏切换对Activ ...

  8. 【Android】安卓四大组件之Activity(一)

    [Android]安卓四大组件之Activity(一) 前言 Activity是Android学习中的一个重要组件,想要对其进行系统的了解可以分为几块内容,这一大章节的内容是有关于activity之间 ...

  9. android 4大组件相互启动,Android四大组件之Activity

    1.感性的认知Activity Activity是安卓的四大组件之一,它就像是一个容器,容器当中装了很多的Android布局,这些布局可以直接写在Activity所引用的xml布局文件当中,也可以通过 ...

最新文章

  1. linux下发布的执行文件崩溃的问题定位 心得一则
  2. 选择主键:自然键还是代理键?
  3. 产业链布局优势明显,三星开启全新移动智能体验新时代
  4. 深度学习 免费课程_2020年排名前三的免费深度学习课程
  5. Android开发笔记(六十一)文件下载管理DownloadManager
  6. BUAA北京地铁乘坐线路查询
  7. 闪迪内存卡软件测试,存储卡不稳定?我们用微波炉测试 结果震惊了!
  8. 浅谈A*算法如何演变为rrt算法
  9. 我的世界空岛生存服务器制作,《我的世界 》10款PC服务器专属空岛玩法大盘点!...
  10. html文字左侧居中,HTML如何让文字靠左居中?
  11. 关于C语言常量需要注意的点
  12. vue-giant-tree模糊搜索,自动展开匹配子节点,再次搜索可重新加载节点
  13. 小新面试错题集,http1.0与1.1的区别?
  14. java 邮箱 电话号码 格式效验 后端
  15. Python|报错解决|os.symlink: FileExistsError
  16. mysql查询同名同姓重名人数,查询与自己同名的人,如何查找重名人数
  17. Banner(轮播)
  18. 大幅提升冲浪效率,搜狗高速浏览器3.0
  19. flex布局之插件 超级好用
  20. 用20行python代码给证件照换底色

热门文章

  1. AS3还可以通过CDATA标签声明多行字符串
  2. keil git 编译文件_交叉编译链下的Makefile(STM32F4xx)
  3. python tkinter库Entry控件Text控件
  4. 原生jsonp发送跨域请求
  5. php源码下载 uctoo_uctoo
  6. hbase 和 zookeeper建立连接_我对Hbase的一些理解——HMaster与Zookeeper之间的交互机制...
  7. 如何用Linux搭建家庭云服务,使用ownCloud在Linux安装你的个人云服务 私有云的搭建...
  8. 新闻列表页flex_使用css3的Flex布局实现列表展示
  9. python学习笔记之lambda表达式
  10. 成功解决pycharm导入第三方库出现ReadTimeoutError超时的问题