02_四大组件之Activity
四大组件之Activity
1. 理论概述
1.1 Activity的理解
Servlet的理解回顾
- 狭义
- Servlet是一个interface,我们的Servlet类都必须是此接口的实现类
- 广义
- Servlet是一种服务器端的组件,用来处理客户端(浏览器)提交的请求,并返回一个响应界面
组件的特点
- 它的类必须实现特定接口或继承特定类
- 需要在配置文件中配置其全类名
- 它的对象不是通过new来创建的,而是系统自动创建的
- 它的对象具有一定的生命周期,它的类中有对应的生命周期回调方法
Activity的定义
- Activity,直译为活动,它是Android定义的四大应用组件之一,也是最重要用得最多的
- Activity用来提供一个能让用户操作并与之交互的界面
- 一个应用有多个界面,也就是包含多个Activity
- 打电话,发短信,拍照,发邮件等功能都是通过Activity来做的
哪些地方用到反射技术(Android)
- 配置文本中配置全类名
- 布局文件定义标签
- 显示意图:Intent(Context context,Class c)
类比Activity与Servlet
| Servlet | Activity | |
|---|---|---|
| 组件 | 服务器端组件 | Android客户端组件 |
| 规范定义的接口或类 | Servlet接口 | Activity类 |
| 注册 | web.xml | AndroidManifest.xml |
| 生命周期方法 | init() service() doGet() doPost() destroy() |
onCreate() onStart() onResume() ... onDestroy() |
| 请求的发出源 | 浏览器/移动设备 | 手机屏幕 |
1.2 Intent和IntentFilter的理解
Intent的理解
- Intent,直译为意图,也就是你想要做什么或想要去哪?
- Intent是Activity,Service和BroadcastReceiver这三个应用组件之间进行通信的信使,例如:我要在Activity中启动另一个Activity,就必须使用Intent对象
- 意图对象还可以携带数据
- 注意:Intent不是Android中的四大应用组件之一
Intent的分类
- 显示意图:明确指定的目标组件的意图
- 创建对象:Intent(Context context,Class clazz)
- 何时使用:当操作当前自己应用的组件时使用
- 隐式意图:没有明确指定目标组件的意图
- 创建对象:Intent(String ation)
- 何时使用:当操作其它应用的组件时使用
IntentFilter的理解
在配置Activity时,可以为Activity指定一个IntentFilter的配置
如果你的Activity希望其它应用能访问到,需要配置
<intent-filter>如果你想启动其它应用的界面你必须用隐式intent,且目标界面Activity配置了
<intent-filter>它的作用类似于web中的为Servlet配置的
<url-pattern><intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
Intent的使用
- 创建:
- 显式:Intent(Context context,Class activityClass)
- 隐式:Intent(String action)//与Activity与
<intent-filter>的action匹配
- 携带数据
- 额外:putExtra(String key,Xxx value)内部用map容器保存
- 有特定前缀:setData(Uri data) //tel:123123,smsto:123123
- 读取数据
- 额外:Xxx getXxxExtra(String key)
- 有特定前缀:Uri getData()
1.3 相关API
- Intent意图
Intent(Context packageContext,Class<?> cls):用于创建显示意图对象Intent(String action):用于创建隐式意图对象putExtra(String name,Xxx value):保存额外数据Xxx getXxxExtra(String name):获取额外数据setData(Uri data):设置有特定格式的uri数据
- Activity:活动
startActivity(Intent intent):一般启动ActivitystartActivityForResult(int reqCode,Intent intent):带回调启动ActivityonActivityResult(int reqCode,int resultCode,Intent data):回调方法setResult(int resultCode,Intent data):设置要返回的结果finish():结束当前ActivitygetIntent():得到启动Activity的意图
- View:代表视图的根基类
setOnClickListener(OnClickListener listener):设置点击监听setOnLongClickListener(OnLongListener listener):设置长按监听
- SmsManager:发送短信的工具类
static SmaManager getDefault():得到当前对象sendTextMessage(…):发送短信
- 设置点击监听的2种方式
- 方式一:Activity中添加监听:
view.setOnClickListener(OnClickListener listener);
- 方式二:布局添加监听:
- layout中:
android:onclick="方法名" - Activity中:
public void 方法名(View v){ }
- layout中:
- 方式一:Activity中添加监听:
- 设置长按监听
view.setOnLongClickListner(OnLongListener listener)
2.Activity开发
2.1 Activity的使用

- 定义
- 定义一个类 extends Activity,并重写生命周期方法
- 在功能清单文件中使用注册
- 启动
- 一般:startActivity(Intent intent)
- 带回调启动:startActivityForResult(Intent intent,int requestCode)
- 重写:onActivityResult(int requestCode,int resultCode,Intent data)
- 结束
- 一般:finish()
- 带结果的:setResult(int resultCode,Intent data)
2.2 Activity的生命周期
Activity界面的四种状态
- 运行状态:可见也可操作
- 暂停状态:可见但不可操作
- 停止状态:不可见,但对象存在
- 死亡状态:对象不存在
Activity生命周期回调方法
onCreate()- onStart()
- onResume()
- onPause()
- onRestart()
- onStop()
onDestroy()

Activity生命周期与状态

1)界面从“死亡”到“开始”
创建对象-->onCreate()-->onStart()-->onResume()
2) 界面从“运行”-->“死亡”
onPause()-->onStop()-->onDestroy()
3) 界面从“运行”-->“停止”
onPause()-->onStop()
4) 界面从“停止”-->“运行”
onRestart()-->onStart()-->onResume()
5) 界面从“运行”-->“暂停”
onPause()
6) 界面从“暂停”-->“运行”
onResume()
重要的:
1. onCreate():在Activity对象创建后调用,只执行一次
2. onDestroy():在Activity死亡之前调用,只执行一次
3. onResume():界面只有经历此方法才能可见可操作
2.3 Activity的TaskStack
- 在Android中,系统用Task Stack(Back Stack)结构来存储管理启动的Activity对象
- 一个应用启动,系统就会为其创建一个对应的Task Stack来存储并管理该应用的Activity对象
- 只有最上面的任务栈的栈顶的Activity才能显示在窗口中
2.4 Activity的launchMode
在Android中,启动一个Activity有时需要总是创建一个新对象,有时需要复用已有的对象,可以通过在配置activity时通过 launchMode属性指定。
launchMode属性值(4个)为:
- Standard:
- 标准模式,每次调用
startActivity()方法就会产生一个新的实例。
- 标准模式,每次调用
- singleTop:
- 如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例
- 如果不位于栈顶,会产生一个新的实例
- singleTask:
- 只有一个实例,默认在当前Task中
- singleInstance:
- 只有一个实例,创建时会新建一个栈,且此栈中不能有其它对象


3. 功能练习
3.1 打电话与发短信

- 进入电话拨打界面的意图:Intent.ACTION_DIAL
- 进入短信编辑界面的意图:Intent.ACTION_SENDTO
- 拨打电话的意图:Intent.ACTION_CALL
- 发送短信的工具类:SmsManager
- 需要的权限:
- 打电话的权限:android.permission.CALL_PHONE
- 发短信的权限:android.permission.SEND_SMS
- 拨打电话的Uri:tel:110
- 进入短信界面的电话Uri:smsto:110
- 携带额外短信数据的标识名为:sms_body
总结
实现一个简单功能的应用的步骤:
外观:分析界面组成,定义布局文件
- 行为:编写Activity的实现
- 在onCreate()中加载布局文件:
setContentView(layoutId) - 调用
findViewById得到需要操作的所有视图对象并保存为成员变量 - 给视图对象设置监听器(点击/长按),在回调主方法实现响应逻辑
- 在onCreate()中加载布局文件:
使用隐式意图启动系统应用的界面
如何找到对应的Action字符串:添加ActivityManager的Log日志,利用系统应用源码找到对应的Activity的配置
权限:当调用一些系统比较重要的功能时,需要声明
02_四大组件之Activity的更多相关文章
- Android的四大组件之Activity
Android的四大组件之Activity Activity:是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,B ...
- Android四大组件之Activity(活动)及其布局的创建与加载布局
Android四大组件之Activity(活动)及其布局的创建与加载布局 什么是Activity ? 活动(Activity)是包含用户界面的组件,主要用于和用户进行交互的,一个应用程序中可以包含零个 ...
- Android四大组件之——Activity的生命周期(图文详解)
转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai 联系方式:JohnTsai.Work@gmail.com [Andro ...
- 安卓四大组件之一activity
概要说明 Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播 ...
- Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)
如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai 联系方式:JohnTsai.Work@gmail.com ...
- 【Android开发日记】之入门篇(四)——Android四大组件之Activity
在Android中,无论是开发者还是用户,接触最多的就算是Activity.它是Android中最复杂.最核心的组件.Activity组件是负责与用户进行交互的组件,它的设计理念在很多方面都和Web页 ...
- 【Android】安卓四大组件之Activity(二)
[Android]安卓四大组件之Activity(二) 前言 在这篇文章之前,我已经写过了一篇有关Activity的内容,是关于activity之间的页面跳转和数据传递,而这篇文章着重强调的是Acti ...
- 【Android】安卓四大组件之Activity(一)
[Android]安卓四大组件之Activity(一) 前言 Activity是Android学习中的一个重要组件,想要对其进行系统的了解可以分为几块内容,这一大章节的内容是有关于activity之间 ...
- Android四大组件及activity的四大启动模式
Android四大组件 1. 广播接收者的两种类型: (1)系统广播接收者,就是继承BroadcastReceiver这个类,然后还要在清单文件中注册,注册之后给他一个action.当系统发生了这个a ...
随机推荐
- 微信小程序——获取当天的前一个月至后一个月
看标题也不知道你有没有明白我想表达的意思,先上个动态图吧~ 需要分析: 1.获取当前日期的前一个月,后一个月和当月.比如说现在是7月5号,我需要得到6月5号至8月5号的日期,同时还要返回当前的星期. ...
- 实现:调用API函数ShowWindow()来隐藏窗口
只需要将相应代码复制即可. 代码如下: #include <iostream> #include <windows.h> int main() { HWND hDos; //声 ...
- 基于C+OpenCV4.0的LineSegmentDetector算法实现
简单记录LSD算法的实现过程,当做备忘录用,如有问题欢迎指出和讨论 LSD的基本实现流程是计算出图像的梯度和场方向,然后对梯度进行排序,然后从大到小进行区域增长,之后对增长得到的区域求最小外接矩形,如 ...
- Windows本机调试内部组件
将详细分析Windows调试的本机接口.希望读者对C和通用NT内核体系结构和语义有一些基本的了解.此外,这并不是介绍什么是调试或如何编写调试器.它可以作为经验丰富的调试器编写人员或好奇的安全专家的参考 ...
- vue-cli3 ios10白屏问题解决思路
在出现了这个问题之后先不要盲目的去瞎试,根据网上的方法试了个遍也没解决问题 先看报的是什么错,再针对的解决问题 首先出现的报错是 SyntaxError: Unexpected token '*' ...
- 洛谷P1854 花店橱窗布置
题目 DP,直接递推比记忆化搜索简单. 定义状态\(dp[i][j]\)为前i行最后一个选择第i行第j个数所得到最大值. 易得状态转移方程 \(dp[i][j]=max(dp[i-1][k]+a[i] ...
- Spark在美团的实践
https://tech.meituan.com/2016/03/31/spark-in-meituan.html 本文已发表在<程序员>杂志2016年4月期. 前言 美团是数据驱动的互联 ...
- 第08组 团队Git现场编程实战
一.组员职责分工 算法:庄锡荣,林鑫灿 UI:许煌标,蔡峰,林晓锋,陈珊珊,侯雅倩,吴珂雨 博客:陈珊珊,王钟贤 二.github提交日志 三.程序运行截图 运行中爬取到的部分信息 数据库中的部分信息 ...
- durpal安装时The translation server is offline解决
从https://localize.drupal.org/download下载语言文件上传到 目录/var/www/html/sites/default/files/translations 或者wg ...
- [Beta]第八次 Scrum Meeting
[Beta]第八次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/5/18 22:00 10min 大运村公寓6F寝室 附Github仓库:WEDO 例会照片 工作情况 ...