目录
Activity介绍
Context
Intent
startActivityForResult()和onActivityResult()
Activity的生命周期
Activity介绍
Activity是一种应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。本文主要介绍Activity的创建、跳转、数据交互及它的生命周期。
Context
Context表示上下文,在 Android 中Context 分为Application Context 、Activity Context和Service Context三种。
Context描述的是一个应用程序环境的信息,通过它可以获取应用程序的资源和类,也包括一些应用级别操作,例如启动Activity、发送广播和接受Intent信息等。
Intent
Intent中文翻译为“意图”,在Android Studio中,它可用于开启新的Activity,也可用于开启 Service服务和发送广播消息。另外Intent可以用于不同组件之间进行数据传递,是Android程序中各个组件进行交互的一种重要方式,其主要分为两种类型。
(1)显式Intent:如果Intent中明确包含了要启动的组件的完整类名(包名及类名),那么这个Intent就是显式的,使用显式Intent最典型的情形是在自己的App中启动一个组件,如:
public void onClick(View view) {
Intent subActivityIntent = new Intent(MainActivity.this, SubActivity.class);
startActivity(subActivityIntent);
}
通过启动按钮组件使活动由MainActivity跳转到SubActivity。
(2)隐式Intent:如果Intent没有包含要启动的组件的完整类名,那么这个Intent就是隐式的。虽然隐式的Intent没有指定要启动的组件的类名,但是一般情况下,隐式的Intent都要指定需要执行的action,一般隐式Intent用在想通过自己的App启动另一个App的组件的时候,让另一个App的组件接收并处理该Intent,如:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.baidu.com"));
startActivity(intent);
通过Intent启动本地的浏览器打开百度网页。
startActivityForResult()和onActivityResult()
在主界面(主Activity)通过startActivityForResult()方法跳转至多个不同的子Activity,当子Activity的代码执行完毕后,再次返回主页面,将子activity中得到的数据显示在主界面或将完成的数据交给主Activity处理。而处理这种带数据的意图跳转需要使用到Activity的onActivityResult()方法。
在主Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法,可以得到传回的数据,其中requestCode用于与startActivityForResult中的requestCode值进行比较判断,以便确认返回的数据是从哪个Activity返回的;resultCode是由子Activity通过其setResult()方法返回,适用于多个activity都返回数据时,来标识到底是哪一个activity返回的值。Intent对象带有返回的数据可以通过“data.getXxxExtra( );”方法来获取指定数据类型的数据。下面用一段简单的代码来说明Activity的跳转数据处理框架:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) { //根据请求码标识哪个Activity打开
}
switch(resultCode) { //根据结果码标识哪个Activity返回
}
}
Activity的生命周期
Activity的生命周期即活动从开始到结束所经历的各个状态;换言之,从一个状态到另一个状态的转变,从无到有再到无,这样一个过程中所经历的状态就叫做生命周期。
Activity本质上有四种状态:
(1)运行:一个活动被移到了活动栈顶部或前台。
(2)暂停:如果一个活动被另一个非全屏的活动所覆盖(比如一个Dialog),那么该活动就失去了焦点,它将会暂停(但它仍然保留所有的状态和成员信息,并且仍然是依附在WindowsManager上),在系统内存极度缺乏时会将其杀死。
(3)停止:如果一个活动被另一个全屏活动完全覆盖,那么该活动处于停止状态(状态和成员信息会保留,但是Activity已经不再依附于WindowsManager了),在系统缺乏资源的时候会将它杀死(它会比暂停状态的活动先杀死)。
(4)重启:如果一个活动在处于停止或者暂停的状态下,系统内存缺乏时会将其结束(finish)或者杀死(kill)。在这种非正常情况下,系统在杀死或者结束之前会调用onSaveInstance()方法来保存信息;与此同时,当Activity被移动到前台时,重新启动该Activity并调用onRestoreInstance()方法加载所保留的信息,以保持原有的状态。