Android基础知识——Activity

 定义Activity    activity指与用户交互的界面

 定义类继承Activity

 在AndroidManifest.xml的节点中声明

 显式意图创建方式

 构造函数,代码少

new Intent(this, NewActivity.class);

 类名形式,灵活,可扩展性强

intent.setClassName(this, "cn.itcast.activity.NewActivity");

 包名类名形式,可启动其他程序中的Activity

intent.setClassName("cn.itcast.downloader", "cn.itcast.downloader.MainActivity");

 创建Activity并传递数据

 在Intent对象中封装了一个Bundle对象,可以用来携带数据

 在新Activity中可以获得意图对象以获取其中Bundle保存的数据

 创建Activity获取返回数据

 使用startActivityForResult(Intent intent, int requestCode)方法打开Activity

 重写onActivityResult(int requestCode, int resultCode, Intent data)方法

 新Activity中调用setResult(int resultCode, Intent data)设置返回数据之后,关闭Activity就会调用onActivityResult方法

 隐式意图创建Activity

 显式意图是指在创建意图时指定了组件,而隐式意图则不指定组件,通过动作、类型、数据匹配对应的组件

 在清单文件中定义时需要定义才能被隐式意图启动

 中至少配置一个和一个,否则无法被启动

 Intent对象中设置的action、category、data在必须全部包含才能启动

 中的、、都可以配置多个,Intent对象中不用全部匹配,每样匹配一个即可启动

 如果一个意图可以匹配多个Activity,Android系统会提示选择

Acitivity三种状态

运行:activity在最前端运行

停止:activity不可见,完全被覆盖

暂停:activity可见,但前端还有其他activity

生命周期相关方法

onCreate:创建时调用,或者程序在暂停、停止状态下被杀死之后重新打开时也会调用[当这个界面第一次创建的时候执行这个方法,当然

  一般情况下,在一个应用中这个方法只会执行一次,(横竖屏切换)]

onStart:onCreate之后或者从停止状态恢复时调用

onResume:onStart之后或者从暂停状态恢复时调用,从停止状态恢复时由于调用onStart,也会调用onResume(当一个界面可以和用户交互,获取到焦点的的时候,执行这个方法,什么是和用户交互?   比如说,你点击屏幕上的按钮,图片等等,activity会给出不同的反应)

onPause:进入暂停、停止状态,或者销毁时会调用(onPause()方法和onResume()方法对应,即activity不能和用户交互的,activity失去焦点,界面上的view

  不能被点击的时候执行。)

onStop:进入停止状态,或者销毁时会调用(当activity不可见的时候,执行这个方法,如从一个activity跳转到另一个activity时,跳转

  前的activity被跳转后的activity遮挡,就会执行onStop()这个方法)

onDestroy:销毁时调用 (当一个activity销毁的时候调用这个方法,与onCreate()对应)

onRestart:从停止状态恢复时调用 (从第一个activity跳转到第二个activity,再返回第一个 activity时,就会执行这个方法

  界面重新变得可见就会执行这个方法。)

这些方法都是两两对应的,onCreate创建与onDestroy销毁;onStart可见与onStop不可见; onResume可编辑(即获得焦点)与onPause(失去焦点)。

Android基础知识——Activity_第1张图片

保存信息相关方法

onSaveInstanceState:在Activity被动的摧毁或停止的时候调用,用于保存运行数据,可以将数据存在在Bundle中

onRestoreInstanceState:该方法在Activity被重新创建的时候调用,例如改变屏幕方向,savedInstanceState为onSaveInstanceState保存的数据

 启动模式

在AndroidManifest.xml中的标签中可以配置android:launchMode属性,用来控制Actvity的启动模式 

四种启动模式都需要在清单文件下的Activity节点下配置,如果不配置,则默认标准standard开启activity

 在Android系统中我们创建的Acitivity是以栈的形式呈现的

standard:每次调用startActivity()启动时都会创建一个新的Activity放在栈顶

singleTop:启动Activity时,指定Activity不在栈顶就创建,如在栈顶,则不再创建

singleTask:如果启动的Activity不存在就创建,如果存在直接跳转到指定的Activity所在位置

在Activity启动模式为singleTask(唯一实例)的情况下,当启动Activity的时候,如果当前Activity不存在则实例化一个新的Activity,如果当前Activity在任务栈中已经存在,则会复用这个Activity实例。当启动模式为singTask的时候,启动已经存在在Activity任务栈中但不在栈顶的Activity时,该Activity会把压在它前面的所有Activity弹出任务栈

singleInstance:如果启动的Activity不存在就创建,如果存在就将指定的Activity移动到栈顶

在Activity启动模式为singleInstance的情况下,首先我们可以发现的是启动模式为singleInstance的Activity处于不同的任务栈(Task编号不同),并保证不再有其他的Activity实例进入,它还是和singleTask一样保持唯一实例,然后它的退出顺序是不再是根据调用顺序,而是在不同的任务栈中,从上往下退出。

1、在standard(默认)启动模式下,我们来回的去跳转Activity,看下日志打印,发现是不会调用onNewIntent方法的,因为它不是一个实例。

2、在singleTop模式下,我们从第一个Activity跳转到第二个Activity,再从第二个Activity跳转自身,再跳转第一个Activity,看下日志打印,我们可以发现,当第二个Activity置于栈顶的时候,由于重用了实例,所以调用了onNewIntent方法。

3.当singleTask和singleInstance模式下也是一样的,因为重用了实例,所以会调用onNewIntent方法,且onNewIntent方法是在前一个Activity的onStop方法后(当前ActivityonReStart方法前)立即调用的。

1、Activity任务栈

在Android的官方文档描述中我们可以知道,任务栈也是栈,具有栈的一切特点。

  Activity任务栈,顾名思义是存放Activity任务的栈,这里的任务栈为上图箱子,Activity为上图的东西。

  当我们每打开一个Activity的时候它会就往Activity任务栈中压入一个Activity,当我们每销毁一个Activity的时候它会从Activity任务栈中弹出一个Activity,由于安卓系统自身的设计,我们只能在手机屏幕上获取当前一个Activity的焦点即栈顶元素(最上面的Activity),其余的Activity会暂居后台等待系统调用。

Android基础知识——Activity_第2张图片

1.1、关于任务栈的概念:

任务栈是用来提升体验而设计的:

(1) 程序打开时就创建了一个任务栈, 用于存储当前程序的activity,当前程序(包括被当前程序所调用的)所有的activity属于一个任务栈。

(2) 一个任务栈包含了一个activity的集合, 可以有序的选择哪一个activity和用户进行交互,只有在任务栈栈顶的activity才可以跟用户进行交互。

(3) 任务栈可以移动到后台,并且保留了每一个activity的状态. 并且有序的给用户列出它们的任务, 而且还不丢失它们状态信息。

(4) 退出应用程序时,当把所有的任务栈中所有的activity清除出栈时,任务栈会被销毁,程序退出。

1.2、关于任务栈的缺点:

(1) 每开启一次页面都会在任务栈中添加一个Activity,而只有任务栈中的Activity全部清除出栈时,任务栈被销毁,程序才会退出,这样就造成了用户体验差,需要点击多次返回才可以把程序退出了。

(2) 每开启一次页面都会在任务栈中添加一个Activity还会造成数据冗余重复数据太多,会导致内存溢出的问题(OOM)。

2、Activity的4种启动方式

  为了解决任务栈产生的问题,Android为Activity设计了启动模式,那么下面的内容将介绍Android中Activity的启动模式,这也是最重要的内容之一。

  启动模式(launchMode)在多个Activity跳转的过程中扮演着重要的角色,它可以解决是否生成新的Activity实例,是否重用已经存在的Activity实例,是否和其他实例共用一个任务栈。任务栈是一个具有栈结构的对象,一个任务栈可以管理多个Activity,每启动一个应用,也就创建一个与之对应的任务栈。

Activity一共有以下四种launchMode模式:1、standard 2、singTop 3、singTask 4、singleInstance,我们可以在AndroidManifest.xml配置的android:launchMode属性为以上四种之一即可。


内存管理

Android系统在运行多个进程时,如果系统资源不足,会强制结束一些进程。优先选择哪个进程来结束是有优先级的。

空:进程中没有任何组件

后台:进程中只有停止状态的Activity

服务:进程中有正在运行的服务

可见:进程中有一个暂停状态的Activity

前台:进程中正在运行一个Activity

你可能感兴趣的:(Android基础知识——Activity)