Android四大组件之Activity详解 · yclog

Activity生命周期:

onCreate:在Acitivty第一次创建时调用,用于做初始化的工作
onStart:onCreate调用后调用,此次界面对用户来说无法看见
onResume:此次界面可见并显示到前台,且当前Acitvity位于当前栈顶,并且处于运行状态
onPause:表示当前Activity正在停止,常做一些存储数据、停止动画等工作(不做耗时操作)
onStop:表示当前Activity即将停止,一般做微量级的回收工作
onDestory:表示当前Activity即将被销毁,可做一些回收工作和最终的资源释放
onRestart:表示当前Activity正在重新启动,当前Activity从不可见状态变化为可见状态

Activity的构成

PhoneWindow是Window的实现类,而Window之下包含一个DecorView,DecorView实际是页面的顶级视图,开发是设置的布局资源添加到系统布局的mContentParent中,android解析XML方法(SAX、Pull、Dom三种方式)

Activity的四种启动模式(standard,singleTop,singleTask,singleInstance)

1:standard(标准启动模式)栈内允许有多个实例,互不影响
2:singleTop 当以singleTop为启动模式的Activity再次启动时,如果当前已经有一个实例位于栈顶,当再次调用原来的onNewIntent()函数,栈顶不会新加入一个实例。如果实例不在栈顶,则与standard标准启动一样
3:singleTask 如果一个Activity设置了该启动模式,任务栈中只能存在一个该Activity的实例。如果任务栈中存在一个Activity实例,则销毁当前Activity栈内位于实例之前的所有Activity实例,最终让该Activity实例位于栈顶。同时调用该Activity的onNewIntent()函数
4:singleInstance 设置singleInstance模式的Activity会在一个单独的任务栈中开启实例,当再次启动该Activity实例时,会重用已存在的任务与实例,并调用该实例的onNewIntent()函数,将intent实例中传递到该实例中

Note:(仍旧将任务栈中X前的实例全部取消)

对于singleTask作为启动模式的实例X,有选择其所需要的任务栈,例如本身主任务栈为S1,且当前任务栈中不存在X实例,若所需要的任务栈为S2,且任务栈S2不存在,则创建S2与X实例,并将实例X存入栈S2中
另一种情况下,假设X所需的任务栈为S1,其他情况如上述例子所示,由于S1任务栈已经存在,所以系统会直接创建X的实例并将其导入栈S1中

设置启动模式方法:

第一种:

1234
<activity    android:name="com.sample.sampleActivity"    android:launchMode="singleTask"    android:label="@string/app_name"/>

第二种:

1234
Intent intent=new Intent();intent.setClass(MainActivity.this,sampleActivity.class);intent.addFalgs(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);

Notes: 第一种无法直接为Activity设定FALG_ACTIVITY_CLEAR_TOP表示,而第二种方式无法为Activity指定singleInstance模式

Activity的Flags

  • FALG_ACTIVITY_NEW_TASK(对应Activity的singletask启动模式)
  • FALG_ACTIVITY_SINGLE_TOP (对应Activity的singletop启动模式)
  • FALG_ACTIVITY_CLEAR_TOP(具有次标记的Activity,当他启动时,在同一任务栈中所有位于它上面的Activity都要出栈,一般与singleTask启动模式一起出现,如果启动的实例已经存在,系统就会调用onNewIntent)
  • FALG_ACTIVITY_EXCLUDE_FROM_RESCENTS(具有这个标记的Activity不会出现在历史的Activity的列表中,等同与android:excludeFromRecents=”true”)

异常情况下的生命周期分析

1、情况1:资源相关的系统配置发生改变导致Activity被杀死并重新创建
横竖屏突然转换,在默认情况下,Activity就会被销毁并且重新创建,系统先调用onSaveInstanceSate来保存当前Activity的状态。该方法调用在onStop之前,与onPause没有时序关系。当Activity在被重新创建之后,系统会调用onRestoreInstanceSate和onCreate方法来判断Activity是否被创建了,如果被重建了,那么我们就可以取出之前保存的数据并恢复,从时序上来说,onRestoreInstanceSate的调用在onStart上。类似TextView源码中包含onSaveInstanceSate方法保存控件内容。在AndroidManifest文件中设置android:configChanges=”orientation”保证屏幕方向固定,此时即使手机旋转界面仍旧保持原来方向不发生改变

2、情况2:Activity按照优先级从高到低,可以分为如下三种
(1) 前台Activity—正在和用户交互的Activity,优先级最高
(2) 可见但非前台Activity—比如Activity中弹出一个对话框,则背后的Activity就是属于这种情况,可见但位于后台无法与用户直接交互
(3) 后台Activity—已经被暂停的Activity,比如执行了onStop,优先级最低。

原文:大专栏  Android四大组件之Activity详解 · yclog

原文地址:https://www.cnblogs.com/wangziqiang123/p/11657848.html

时间: 2024-12-23 20:27:59

Android四大组件之Activity详解 · yclog的相关文章

Android四大组件之Activity详解

.Activity的本质 Activity是Android提供的四大组件之一,是进行Android开发必不可少的组件.Activity是一个界面的载体,可以把它与html页面进行类比,html页面由各种各样的标签组成,而Activity则可以由各种控件组成.然而Activity也并不是那么简单.查看Activity类的源码我们就可以看到,这个类大概有六千多行代码,说明Android对Activity的处理是相当复杂的.不过我们平时进行开发的时候不需要了解到那么深入的地步,因为我们可以根据Acti

Android四大组件之Activity详解——创建和启动Activity

前面我们已经对Activity有过简单的介绍: Android开发——初始Activity Android开发——响应用户事件 Android开发——Activity生命周期 先来看一下最终结果 创建Activity: 接下来打开我们的IDE,创建一个名叫ActivityDemo的Android Application Project 工程默认已经为我们创建了一个Activity,现在我们手动添加一个名叫SecondActivity的类 点击finish完成SecondActivity类的创建.

Android四大组件之Activity详解——传值和获取结果

废话不多说,先来看效果图 项目源码: http://download.csdn.net/detail/ginodung/8331535 程序说明: 在MainActivity中输入用户名和密码,然后提交到SecondActivity 在SecondActivity中获取提交的数据,通过Toast显示该数据 在SecondActivity设置新的用户名和密码,然后返回给MainActivity MainActivity获取到SecondActivity返回的数据后从新设置用户名和密码的值,然后用T

Android 四大组件之Service详解

                   Android四大组件之Service详解    来这实习已经10多天了,今天整理整理学习时的Android笔记.正所谓好记性不如烂笔头,今天来说说service组件. service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的. Service是在一段不定的时间运行在后台,不和用户交互应用组件.每个

Android四大组件-Service并非详解

距离上篇文章竟然快一年了.这次是想明确service一些比较重要的点. 至于什么是service,我也不想多去讨论,我只想清晰确认这么几个问题: 1.service的生命周期到底如何? 2.Activity如何让service做事? 3.service与thread之间有没有关系? 4.远程service是什么东西? 5.AIDL的使用? 6.前台service? 一.生命周期 如果需要图,可以百度,好多.我这里直接运行代码打log. 1.startService()启动Service 操作顺序

Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

            如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:[email protected]       [Android四大组件学习系列Activity篇]        1.Android四大组件之——Activity(一)定义.状态和后退栈(图文详解) 2.Android四大组件之——Activity的生命周期(图文详解) 3.Android四大组件之——Activity的开启StartActivit

Android四大组件之Activity(活动)及其布局的创建与加载布局

Android四大组件之Activity(活动)及其布局的创建与加载布局 什么是Activity ? 活动(Activity)是包含用户界面的组件,主要用于和用户进行交互的,一个应用程序中可以包含零个或多个活动. 手动创建Activity的过程详解 到现在为止,你还没有手动创建过活动呢,在第一个安卓工程中,HelloWorldActivity是ADT帮我们创建的,手动创建活动可以加深我们的理解,因此现在是时候应该自己动手了. 首先,你需要再新建一个 Android 项目,项目名可以叫做 Acti

【Android的从零单排开发日记】之入门篇(四)——Android四大组件之Activity

在Android中,无论是开发者还是用户,接触最多的就算是Activity.它是Android中最复杂.最核心的组件.Activity组件是负责与用户进行交互的组件,它的设计理念在很多方面都和Web页面类似.当然,这种相似性主要体现在设计思想上.在具体实现方面,Android的Activity组件有自己的设计规范,同时,它能够更简便地使用线程.文件数据等本地资源. 一.Activity 的生命周期 Activity 的生命周期是被以下的函数控制的. 1 public class Activity

Android学习之路——Android四大组件之activity(二)

上一篇讲了activity的创建和启动,这一篇,我们来讲讲activity的数据传递 activity之间的数据传递,这里主要介绍的是activity之间简单数据的传递,直接用bundle传递基本数据类型的数据.还有一种数据类型是parcelable和serialable 用bundle 传递数据有两种情况,这篇文章就分别从两个方面说明一下. 一.利用bundle传递基本数据类型 1.启动时传递数据,使用intent的put方法,将数据写入bundle中,然后startActivity(inte