activity详解、生命周期、启动模式

来源:互联网 发布:服务器端口怎么开 编辑:程序博客网 时间:2024/05/17 21:38

一 activity简介:

activity是android四大组件之一,另外三个是Service、BroadCastReceiver、ContentPrrivider);activity是android中使用最为频繁的组件之一。中文翻译为活动,但我觉得把它看作界面更为合适。下面我们先来看一下activity的基础知识。

二 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:

        <activity            android:name=".aty.TestActivity"            android:exported="true"            android:icon="@mipmap/ic_launcher_round"            android:label="@string/app_name"            android:launchMode="singleInstance"></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结束了,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的启动模式,在实际的项目开发中启动模式虽然用的不多,但是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启动后,系统会为它创建一个新的任务栈。