四大组件之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的使用

  1. 创建:

    • 显式:Intent(Context context,Class activityClass)
    • 隐式:Intent(String action)//与Activity与<intent-filter>的action匹配
  2. 携带数据
    • 额外:putExtra(String key,Xxx value)内部用map容器保存
    • 有特定前缀:setData(Uri data) //tel:123123,smsto:123123
  3. 读取数据
    • 额外: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):一般启动Activity
    • startActivityForResult(int reqCode,Intent intent):带回调启动Activity
    • onActivityResult(int reqCode,int resultCode,Intent data):回调方法
    • setResult(int resultCode,Intent data):设置要返回的结果
    • finish():结束当前Activity
    • getIntent():得到启动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){ }
  • 设置长按监听
    • view.setOnLongClickListner(OnLongListener listener)

2.Activity开发

2.1 Activity的使用

  1. 定义

    1. 定义一个类 extends Activity,并重写生命周期方法
    2. 在功能清单文件中使用注册
  2. 启动
    1. 一般:startActivity(Intent intent)
    2. 带回调启动:startActivityForResult(Intent intent,int requestCode)
    3. 重写:onActivityResult(int requestCode,int resultCode,Intent data)
  3. 结束
    1. 一般:finish()
    2. 带结果的: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

总结

  1. 实现一个简单功能的应用的步骤:

    • 外观:分析界面组成,定义布局文件

    • 行为:编写Activity的实现
      • 在onCreate()中加载布局文件:setContentView(layoutId)
      • 调用findViewById得到需要操作的所有视图对象并保存为成员变量
      • 给视图对象设置监听器(点击/长按),在回调主方法实现响应逻辑
  2. 使用隐式意图启动系统应用的界面

    如何找到对应的Action字符串:添加ActivityManager的Log日志,利用系统应用源码找到对应的Activity的配置

  3. 权限:当调用一些系统比较重要的功能时,需要声明

02_四大组件之Activity的更多相关文章

  1. Android的四大组件之Activity

    Android的四大组件之Activity Activity:是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,B ...

  2. Android四大组件之Activity(活动)及其布局的创建与加载布局

    Android四大组件之Activity(活动)及其布局的创建与加载布局 什么是Activity ? 活动(Activity)是包含用户界面的组件,主要用于和用户进行交互的,一个应用程序中可以包含零个 ...

  3. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  4. 安卓四大组件之一activity

    概要说明 Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播 ...

  5. Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

                如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com   ...

  6. 【Android开发日记】之入门篇(四)——Android四大组件之Activity

    在Android中,无论是开发者还是用户,接触最多的就算是Activity.它是Android中最复杂.最核心的组件.Activity组件是负责与用户进行交互的组件,它的设计理念在很多方面都和Web页 ...

  7. 【Android】安卓四大组件之Activity(二)

    [Android]安卓四大组件之Activity(二) 前言 在这篇文章之前,我已经写过了一篇有关Activity的内容,是关于activity之间的页面跳转和数据传递,而这篇文章着重强调的是Acti ...

  8. 【Android】安卓四大组件之Activity(一)

    [Android]安卓四大组件之Activity(一) 前言 Activity是Android学习中的一个重要组件,想要对其进行系统的了解可以分为几块内容,这一大章节的内容是有关于activity之间 ...

  9. Android四大组件及activity的四大启动模式

    Android四大组件 1. 广播接收者的两种类型: (1)系统广播接收者,就是继承BroadcastReceiver这个类,然后还要在清单文件中注册,注册之后给他一个action.当系统发生了这个a ...

随机推荐

  1. 前端知识--控制input按钮的可用和不可用

    最近在项目的开发的时候,自己虽然是写后端的,但是,在开发核心的时候,前端的知识自己还是会用到的,多以前端这块自己由于好长时间都没有去看,所以几乎已经忘记的差不多了,现在也只能是想起一点记录一点,以便能 ...

  2. Linux 字符集的查看及修改

    一·查看字符集 字符集在系统中体现形式是一个环境变量,以CentOS6.5为例,其查看当前终端使用字符集的方式可以有以下几种方式: 第一种: [root@Testa-www tmp]# echo $L ...

  3. BZOJ 5305: [Haoi2018]苹果树 组合计数

    一定要注意要乘阶乘,细节很多. code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s ...

  4. 刷题记录:[网鼎杯]Fakebook

    目录 刷题记录:[网鼎杯]Fakebook 一.涉及知识点 1.敏感文件泄露 2.sql注入 二.解题方法 刷题记录:[网鼎杯]Fakebook 题目复现链接:https://buuoj.cn/cha ...

  5. 【自学Spring Boot】什么是Spring Boot

    为啥要有Spring Boot? 以前大学刚开始学java web的时候,需要搭建起web框架,当时使用的是SSH(struts+spring+hibernate),那就开始搭建吧,初学者哪里知道整套 ...

  6. php 5 与7有什么区别

    PHP 7.0使用新版的ZendEngine引擎,带来了许多新的特性,其与相比,有如下特性: 性能提升:PHP7比PHP5.0性能提升了两倍. 全面一致的64位支持. 以前的许多致命错误,现在改成抛出 ...

  7. 请写出css3样式的优先级,并排序

    !important(权重最大)1000>内嵌样式(style="")>内部样式>外联样式>@import url("url");

  8. 监控指标 TP99 TP999 含义

    TP=Top Percentile,Top百分数,是一个统计学里的术语,与平均数.中位数都是一类. TP50.TP90和TP99等指标常用于系统性能监控场景,指高于50%.90%.99%等百分线的情况 ...

  9. ThreadLocal:的面试

    ThreadLocal: 为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序. 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变 ...

  10. 【maven】插件和依赖管理

    1.插件管理 定义 pluginManagement 用来做插件管理的.它是表示插件声明,即你在项目中的pluginManagement下声明了插件,Maven不会加载该插件,pluginManage ...