一、Activity理解

1、定义:

  直译为活动,是Android定义四大应用组件之一,也是最重要的用的最多的;

  用来提供一个能让用户操作并与之交互的界面

  一个应用有多个界面也就是包含多个Activity

  打电话、发短信、拍照、发邮件等功能都是通过Activity来做的

2、Activity生命周期

3、配置Activity

  Android应用要求所有应用程序的组件(Activity、Service、ContentProvider、BroadcastReceiver)都必须进行显示的配置,只要为<application.../>元素添加<Activity.../>子元素即可配置Activity;通常需要指定如下几个属性:

  name:指定该Activity的实现类的类名;

  icon:指定该Activity对应的图标;

  label:指定该Activity的标签;

  exported:指定该Activity是否允许被其他应用程序调用(true允许被调用);

  launchMode:指定该Activity的加载模式;

  此外,通常还需要指定一个或多个<intent-filter.../>元素,该元素用于指定该Activity可响应的Intent(意图)。

二、启动、关闭Activity

  1、启动Activity

   一个Android应用程序通常都会包含很多Activity,但只有一个Activity会作为程序的入口;当应用程序运行时将会自动启动并执行该Activity,其他Activity通常由入口Activity启动或者由入口Activity启动的Activity启动。

  Activity启动其他Activity有如下两个方法:

    startActivity(Intent intent);  启动其他Activity;

    startActivityForResult(Intent intent,int requestCode); 以指定的请求码启动Activity,而且程序将会获取新启动的Activity返回的结果(通过重写onActivityResult(...)方法来获取)。

  2、关闭Activity

    finish()  结束当前Activity;

    finishActivity(int requestCode) 结束以startActivityForResult(Intent intent,int requestCode)方法启动的Activity。

三、使用Bundle在Activity之间交换数据

  当一个Activity启动另一个Activity时常常会有一些数据需要传过去,这就要用到Intent,只要将需要交换数据放入Intent中即可。Intent提供了多个重载的方法来“携带”额外的数据:

    putExtras(Bundle data)   向Intent中放入需要“携带”的数据包;

    Bundle getExtras()  取出Intent中所携带的数据包;

    putExtra(String name,Xxx value)  向Intent中按键值对的形式存入数据;

    getXxxExtra(String name)  从Intent中按key取出指定类型的数据;

    注意:使用putExtra(String name,Xxx value)方法时,如果该Intent对象中已经携带了Bundle对象,则该方法直接向Intent所携带的Bundle中存入数据;如果还没有携带Bundle对象,该方法会先为Intent创建一个Bundle,再向Bundle中存入数据。

  上述方法中的Bundle就是一个简单的数据携带包,该Bundle对象包含了多个方法来存入/取出数据:

    putXxx(String key,Xxx data)  向Bundle中放入Int、Long等各种类型的数据;

    putSerializable(String key,Serializable data)  向Bundle中放入一个可序列化的对象;

    getXxx(String key)   从Bundle中取出Int、Long等各种类型的数据;

    getSerializable(String key,Serializable data)  从Bundle中取出一个可序列化的对象;

在练习的过程中出现找不到Activity对应的实现类,在配置文件中配置name属性时连同包名一起写上即可,如下:

代码片段:

四、启动其他Activity并返回结果

  获取被启动Activity所返回的结果:

    .当前Activity需要重写onActivityResult(int requestCode,int resultCode,Intent intent),当被启动的Activity返回结果时,该方法将会被触发。

    .被启动的Activity需要调用setResult()方法设置处理结果。

五、Activity的回调机制

  回调机制的第一种是现实方式是典型的命令者模式。

六、Activity生命周期

  当Activity处于android应用中运行时,它的活动状态由Android以Activity栈的形式管理,当前活动的Activity位于栈顶;随着不同应用的运行,每个Activity都有可能从活动状态转入非活动状态。

  归纳起来分为四种状态:

    运行状态:当前Activity位于前台,用户可见,可以获得焦点(可见可操作);

    暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点(可见但不可操作);

    停止状态:该Activity不可见,失去焦点(不可见,但对象存在);

    销毁状态:该Activity结束或Activity所在的进程被结束(对象不存在)。

七、Activity加载模式

    为什么要为Activity指定加载模式?

    Android采用Task来管理多个Activity,当我们启动一个应用时,Android就会为之创建一个Task,然后启动这个应用的入口Activity(即,<intent-filter>中配置为MAIN和LAUNCHER的Activity);只有最上面的任务栈的栈顶的Activity才能显示在窗口中。

    Activity的加载模式就是负责管理实例化、加载Activity的方式,并可以控制Activity与Task之间的加载关系。

  1、standard:标准模式(默认加载模式)

    每次通过这种模式来启动目标Activity时,Android总会为目标Activity创建一个新的实例 ,并将该Activity添加到当前Task栈中(这种模式不会启动新的Task,新的Activity将会被添加到原有的Task中); 不同Activity实例的hashCode值有差异,但它们所在的Task ID(可以通过调用Activity的getTaskId()来获取它所在的Task的ID)总是相同的--表明这种加载模式不会使用全新的Task; 当用户单击手机的返回键时系统会逐一从Activity栈顶删除Activity实例。

  2、singleTop:Task栈顶单例模式

    当目标Activity已经位于栈顶,系统不会重新创建目标Activity的实例,而是直接复用已有的Activity实例;

    当目标Activity存在但不位于栈顶,系统会重新创建目标Activity的实例并将它加载到栈顶;  

  3、singleTask:Task内单例模式

    使用这种加载模式的Activity在同一个Task内只有一个实例;

      .如果要启动的目标Activity不存在,系统会将会创建目标Activity的实例并将它加载到栈顶;

      .当目标Activity已经位于栈顶,系统不会重新创建目标Activity的实例,而是直接复用已有的Activity实例;

      .当目标Activity存在但不位于栈顶,系统将会把位于该Activity上面的所有Activity移除Task栈,从而使得当目标Activity转入栈顶。

  4、singleInstance:全局单例模式

    在这种加载模式下,系统保证无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例,并会使用一个全新的Task栈来加载该Activity实例。

    .如果要启动的目标Activity不存在,系统会将会创建一个全新的Task,在创建目标Activity的实例,并将它加入到新的Task栈顶。

    .当目标Activity存在,无论位于哪个应用程序中、位于哪个Task中,系统都会把该Activity所在的Task转到前台,从而使该Activity显示出来。

  注意:使用这种加载模式加载的Activity实例总是位于Task栈顶,且该Task只包含该Activity。

八、Activity与Servlet

1、Servlet

狭义:是一个interface,我们的Servlet类都必须实现此接口

广义:是一种服务器端组件,,用来处理客户端/浏览器提交的请求并返回一个响应界面。

九、组件

  必须实现特定的接口或继承特定的类

  需要在配置文件中配置其全类名

  它的对象不是通过new来创建,而是系统自动创建的

  它的对象有一定的生命周期,它的类中有对应的生命周期回调方法

  

十、面试问题:

1、哪些地方用到了反射

1>、配置文件中配置全类名

2>、布局文件定义标签

3>、显示意图  Intent(Context context,Class c)

    

  

android-Activity(四大组件之一)的更多相关文章

  1. Android的四大组件之Activity

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

  2. Android深入四大组件(五)Android8.0 根Activity启动过程(后篇)

    前言 在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读An ...

  3. Android深入四大组件(四)Android8.0 根Activity启动过程(前篇)

    前言 在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读An ...

  4. android中四大组件之间相互通信

    好久没有写有关android有关的博客了,今天主要来谈一谈android中四大组件.首先,接触android的人,都应该知道android中有四大组件,activity,service,broadca ...

  5. Android的四大组件

    Android的四大组件:Activity.Service.BroadcastReceiver.Content Provider. Content Provider 属于Android应用程序的组件之 ...

  6. Android开发四大组件概述

    这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity具体解释 二.Service具体解释 三.Broadcast Receiver具体解释 四.Content Provid ...

  7. Java乔晓松-android的四大组件之一Service(服务的绑定)

    android的四大组件之一Service(服务的绑定) 怎么绑定服务,又怎么解除服务,代码如下: MainActivity.java源码: package com.example.lesson14_ ...

  8. Android的四大组件及应用安装安全问题(4)

    Android的四大组件及组件间通信 如果想对四大组件有深入的了解,那永远不要停留在一些条条干干的SDK API的认识,需要了解他的通讯,他的复用,他的边界问题,这样才会对四大组件有透明的认识. 四大 ...

  9. Android深入四大组件(八)广播的注册、发送和接收过程

    前言 我们接着来学习Android四大组件中的BroadcastReceiver,广播主要就是分为注册.接收和发送过程.建议阅读此文前请先阅读Android深入理解四大组件系列的文章,知识重复的部分, ...

  10. Android之四大组件、六大布局、五大存储 总结

    Android之四大组件.六大布局.五大存储 一.四大组件:Android四大组件分别为activity.service.content provider.broadcast receiver.   ...

随机推荐

  1. 无法定位程序输入点 _glutCreateWindowWithExit于动态链接库glut32.dll上

    程序运行提示错误"无法定位程序输入点 _glutCreateWindowWithExit于动态链接库glut32.dll上",网上查了说是opengl的.lib和.dll版本过低, ...

  2. "Project facet Java version 1.7 is not supported"的问题解决的办法

    问题描述 在eclipse中,从SVN中检出project代码,拖拽式部署到local server中的时候,报出以下错误: 问题分析 问题产生的原因是,SVN中的代码是采用java 1.7开发编译的 ...

  3. Oracle中“行转列”的实现方式

    在报表的开发当中,难免会遇到行转列的问题. 以Oracle中scott的emp为例,统计各职位的人员在各部门的人数分布情况,就可以用“行转列”: scott的emp的原始数据为: EMPNO ENAM ...

  4. jquery中append()、prepend()、after()、before()的区别详解

    append() - 在被选元素的结尾插入内容(内容的结尾,比如说有个a标签,则是在</a>这个标签之前添加东西) prepend() - 在被选元素的开头插入内容(内容的开始,比如说有个 ...

  5. 智能车学习(七)——按键矩阵的实现

    一.原理说明 就是按键矩阵代码书写的一个说明,就是讲K5到K7先输出高电平,而K1和K4则调成上拉输入,如果检测到K1到K4有一个变为0,说明有按键按下去,立刻进行转换,是的K1到K4设置为输出高电平 ...

  6. Android之Inflate()

      Inflate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的,没有找到的同时并显示功能.最近做的一个项目就是这一点让我迷茫了好几天. Android上还有一个与Inflate( ...

  7. c++ shared_ptr 使用注意事项. 2

    1.抛弃临时对象,让所有的智能指针都有名字. 2.类向外传递 this 的  shared_ptr 让类继承   enable_shared_from_this. 然后返回  shared_from_ ...

  8. JMeter中的场景执行持续时间设置

    jmeter之调度器配置 JMeter的线程组设置里有一个调配器设置,用于设置该线程组下脚本执行的开始时间.结束时间.持续时间及启动延迟时间.当需要半夜执行性能测试时会用到这个功能. 设置调度器配置, ...

  9. hdu3496 二维01背包

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3496 //刚看题目以为是简单的二维01背包,but,,有WA点.. 思路:题中说,只能买M ...

  10. Uva 524 Prime Ring

    如果用全排列生成之后,在判断是否是素数环是会超时的,应该用回溯. 回溯的时候  首先要注意 递归边界 ,结束的时候别忘记判断最后一个和第一个元素能否成立  还有要记得vis的使用和递归之后的清理. # ...