Activity界面跳转、数据传递和生命周期
四大组件
- activity :界面
- BroadcastReceiver :广播接收者
- Service :服务,简单理解为一个没有界面的activity
- ContentProvider :内容提供者,把应用程序的私有数据暴露出去
Activity的创建和跳转
1 AndroidManifest清单文件详解
- Application的label标签表示应用程序列表里应用的名称
- activity的label标签表示的应用程序的桌面名称
- Application的label和activity的label标签不是一回事
创建应用程序的桌面图标
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
常见的类别
- cateorg LAUNCHER DEFAULT bROWSER MAPS
一个应用程序可以有多个桌面图标
2 意图设置动作激活一个新的界面
Java代码:
// 1. 创建意图对象
Intent intent = new Intent();
// 2. 设置动作
intent.setAction("zuo.ren.bu.neng.tai.ma.rong");
// 3. 开启activity
startActivity(intent);
清单文件:
<!-- 意图过滤器 -->
<intent-filter >
//和java代码的动作要匹配
<action android:name="zuo.ren.bu.neng.tai.ma.rong"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
3 隐式意图和显式意图(重点)
隐式意图:开启目标activity,回去清单文件匹配意图,如果匹配成功,就开启activity;如果匹配失败,就报找不到这个activity的异常。
- 缺点:效率低,代码数据复杂
- 优点: 可以开启自己应用或者其他应用程序里的activity界面
显示意图
- 原理:开启目标activity,直接指定类的字节码,开启activity;只能开启自己应用程序里的activity。
- 优点:效率高,代码书写简单
- 缺点:只能开启自己应用程序里的activity,不能开启其他应用程序里的activity
编写步骤
// 1. 创建意图对象,指定类的字节码
Intent intent = new Intent(this,ThirdActivity.class);
// 2. 开启目标activity
startActivity(intent);
4 设计意图的目的
- 目的:组件之间解耦
- 作用:激活组件,组件之间传递数据
Activity跳转时传递数据
5 意图传递数据(重点)
- java :八大基本类型及其数组
- bundle :数据捆
- Serializable :序列化
- Parcelable :序列化到公共内存
- Intent :意图类型
6 URI介绍
Url: 统一资源定位符 http://www.baidu.com/image/logo.png
URI: 统一资源标识符 itcast://xian10/班长
- scheme :约束
- host :主机名
- port :端口号
- path :路径
Activity销毁时传递数据
7 开启activity获取返回值(重点)
开启目标activity,等待activity关闭时返回数据
特殊的方式开启activity
startActivityForResult(intent, 1);设置返回的数据
Intent intent = new Intent();
intent.putExtra(“num”, phoneNum);设置返回的数据
setResult(10, intent);
//关闭当前页面
finish();获取activity返回的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);String phoneNum = data.getStringExtra("num"); etContacts.setText(phoneNum);
}
8 请求码和结果码的作用(重点)
- 区分数据是从哪个页面返回的
Activity生命周期
9 activity的生命周期(重点)
- 人: 被出生–>哭()–>幼年()–>少年()–>青年()–>中年()–>老年()–>翘辫子()
- 恋爱:暗恋()–>表白()–>热恋()–>痴恋()–>失恋()
activity生命周期:
开启activity:onCreate()–>onStart()–>onResume()
- 关闭activity:onPuse()–>onStop()–>onDestroy()
- 最小化 :onPause()–>onStop()
- 最大化 :onRestart()–>onStart()–>onResume()
10 读文档查看activity的生命周期的分类
完整生命周期entire lifetime
onCreate()–>onStart()–>onResume()–>onPuse()–>onStop()–>onDestroy()
可视生命周期visible lifetime
onStart()–>onResume()–>onPuse()–>onStop()
前台生命周期foreground lifetime
onResume()–>onPuse()
11 横竖屏切换activity的生命周期
先销毁一个activity,然后在床架一个新的activity
固定activity屏幕朝向
- landscape :横屏
- portrait :竖屏,不设置就是默认的
- sensor :自适应
使activity不敏感屏幕朝向的变化
- android:configChanges=”orientation|keyboard|screenSize”
任务栈和Activity的启动模式
12 任务栈的概念
- 任务:开启的activity界面
栈 :队列,先进先出(吃进去拉出来) 栈,先进后出(吃进去吐出来)
把应用程序开启的activity放到一个栈里
13 Activity的启动模式
影响activity在任务栈中的顺序
标准模式:standard
- 默认的,开启一个activity,系统创建这个activity的实例对象,把他放到应用程序任 务栈的栈顶
单一顶部模式:singleTop
开启activity界面,系统回去应用程序任务栈的栈顶查找有没有这个activity的实例对象,如果有,则复用栈顶的activity;如果栈顶没有,则在栈顶创建activity的实例对象
系统浏览器的书签
单一任务模式:singleTask
开启activity,系统回去应用程序的任务栈查找有没有这个activity的实例对象,如果有,则移除这个activity上面的所有activity的实例对象,使其位于任务栈的栈顶;如果没有,则在栈顶创建这个activity的实例对象
应用场景:系统浏览器
单一实例模式:singleInstance
- 开启目标activity,系统给这个activity创建一个单独的任务栈,这个任务栈就只有这个activity。整个手机操作系统里就只有这样的一个activity。
- 应用场景:系统的来电界面