activity是android四大组件之一,另外三个是Service、BroadCastReceiver、ContentPrrivider);activity是android中使用最为频繁的组件之一。中文翻译为活动,但我觉得把它看作界面更为合适。下面我们先来看一下activity的基础知识。
1:使用avtivity
(1) 建立自己的activity需要继承Activity基类
public class TestActivity extends Activity {
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.aty_main);//加载布局
}
}
(2) androidManifest配置activity:
name:指定activity实现的类名
icon:指定Activity对应的图标
label:指定该activity的标签
exported:是否允许被外部程序调用,如果True允许
launchMode:该activity的加载模式,有四种分别是standard,singleTop,singleTask,singleInstance.后面会详细介绍。
2:启动关闭actiivity
(1) 启动activity
activity起动activity有两种方法:
startActivity(Intent intent)
startActivityForResult(intent intent,int requestCode)
intent:intent是Android应用里各组件之间通信的重要方法,一个Activity通过Intent来表达自己的“意图” --想要起动activity组件或Service组件
(2) 关闭activity
关闭activityy有两个方法:
finish():结束单前Activity
finishActivity(int requestCode):结束已StartActivityForResult(Intent inten,int requestCode)方法启动的Activity
首先我们来看一下Activity的四个状态:
活动状态:当前Activity在前台,可以获得焦点,用户可以看见
暂停状态:该Activity依然可见,其他Activity位于前台,不能获得焦点
停止状态:Activity不可见,失去焦点
销毁状态:该Activity结束了,Activity所在的Dalviik进程结束了
1. Activity的生命周期可以分为两部分
正常情况下的生命周期:
用户参与的请况下,Activity所经过的生命周期变化
异常情况下的生命周期:
activity被系统回收或者由于当前设备Configuration发生改变从而导致Activity被销毁重新创建。
异常情况下的生命周期以还有空单独写一篇文章
正常情况下的生命周期分析:
(1)onCreate
这个方法在正常开发中使用最多的一个方法,表示Activity正在被创建,在这个方法中我们可以做一些初始化的工作,比如调用setContentView加载布局资源、初始化Activity数据、绑定事件等。
(2)onRestart
这个方法是Activity由不可见重新变为可见时调用,当用户打开一个新的activity,当前activity就会暂停,onPause(正在停止)、onStop(即将停止)方法执行,但是用户又回到当前Activity,这种情况下就会运行当前方法。
(3)onStart、
这个方法是Activity右不可见变为可见时调用,运行这个方法时,Activity已经可见了,还没有出现在前台,也就是说我们还看不见。
(4)onResume
我觉得这个方法于onStart有点相似,但是它们又有区别的。onStart于onResume都表示Activity已经显示出来了,但是onStart的时候Activity还在后台,而onResume的时候Activity已经在前台了。
(5)onPause
这个方法是一个Activity启动或恢复另一个Activity时被调用,通常在这个方法中我们会将一些销耗Cpu的资源释放掉,已及保存一些关键数据,但是在这个方法中一定不要执行太耗时的操作。因为这会影响新的Activity执行。
(6)onStop
这个方法在活动完全不可见时调用,表示Activity即将停止,可以做一些资源回收工作但是同样不能太耗时。
(7)onDestroy
这个方法由Activity被销毁是调用,这是Activity最后一个方法。
1:Activity之间跳转会执行哪几个生命周期方法:
从A跳转到B分为两种情况:
B透明 A执行onCreate、onStart、onResume、onPause、onStop,B执行 onCreate、onStart、onResume
B不透明 A执行onCreate、onStart、onResume、onPause,B执行 onCreate、onStart、onResume、
2:第一次启动Activity会运行哪几个生命周期方法:
onCreate->onStart->onResume
3:当用户再次回到Activity时会调用哪几个生命周期方法:
onRestart->onStart->onResume
4:当用户按back回退时会调用哪几个生命周期方法:
onPause->onStart->onDestroyy
上面我们讲了Activity的生命周期,下面我们来看看Activity的启动模式,在实际的项目开发中启动模式虽然用的不多,但是Activity作为android最核心的组件,而且启动模式虽用的少,但是在每个商业项目中它又多多少少会用到几次。Activity中启动模式一共有4种它们分别是standard、singleTop、singleTask和singleInstance.
使用方式:
AndroidManifest.xml中通过给activity标签指定android:launchMode属性来选择启动模式(在activity基础知识中我已经放了源码)
下面我们来详细介绍各种activity启动模式:
standard:标准启动模式,这也是系统的默认启动模式,也就是我们创接的每个Activity只要没有手动指定启动模式都是这个。android是使用返回栈来管理activity的启的,standard下,我们每次创建一个新的Activity,它就会在返回栈中入栈,并处于栈顶位置。每次启动系统都会创建一个新的实例,它的onCreate,onStart,onResume都会被调用。
也就是说:
当启动一个新的Activity时,系统不会考虑它是否在返回栈中存在,谁运行该activity该activity就会加入到运行它的activiy的栈中。
它是一种单实例模式,一个任务栈中可以有多个实例,一个实例可以属于多个任务栈。
singleTop:
栈顶复用模式,在介绍这个模式前我们先思考一个问题,activity已经在栈顶了,当我们再次启动该activity时为什么还要再创建一次呢?有什么方法可以解决这个问题吗?我们现在要讲的singleTop就可以解决这个问题。当Activity A启动一个新的Activity B如果B位于栈顶则不会创建B,同样它的onCreate、onStart、onResume不会被系统调用,同时它的onNewIntent方法会被调用,通过此方法我们可以获取调用信息。如果新的Activity已经存在且不是位于栈顶,那么新的activiy会被重新创建。
singleTask:
栈内复用模式,是一种单实例模式,和singleTop一样,系统也会调用onNewIntent。它跟SingleTop不同的是,singTop只有要启动的Activity位于栈顶时才会不启动,而singleTask每次启动该活动时系统首先检查返回栈中是否存在该实例,如果存在调用该实例,并把这个活动之上的所有活动统统出栈,否则创建一个新的活动实例。
singleInstance:
单实例模式,它是四种模式中最特殊的一种模式了,它具有singleTask的所有特性,它的特点是只能位于一个单独的一个任务栈中,单创接一个新的Activity时,Activity启动后,系统会为它创建一个新的任务栈。