一、创建和使用:

  1、Activity是android的四大组件之一,需要继承Activity并在清单文件中进行声明才能使用。没有声明则报错。

  2、启动Activity是通过Intent,有两种方式:显式Intent和隐式Intent,前者通常是启动我们自己的Intent;后者通常是调用其他的项目进行操作(如打电话)

二、生命周期方法:是Activity创建到销毁过程中的回调方法,可以在其中处理一些事物,例如构建View,保存数据等。

参考http://colobu.com/2014/09/25/android-activity-lifecycle/,

说明:①onSaveInstanceState不是生命周期方法,但是在一些特殊情况下会被调用(不是一定).需要注意的是其何时会被调用(简单的说就是由系统非用户主动结束一个activity时会被调用)。由于不是一定调用,所以如果需要保存一些持久化数据需要使用onPause()。参考:http://www.cnblogs.com/hanyonglu/archive/2012/03/28/2420515.html

  ②关于横竖屏切换的问题:默认情况下,此时会引起activity的重新绘制(会触发上面的方法)。详细的讨论参考:http://www.cnblogs.com/xiaoQLu/p/3324503.html.小知识:Ctrl+F11/F12--》模拟器横竖屏切换。默认情况下横竖屏的切换导致Activity的销毁和重新创建,可以在清单文件中加入配置忽略这种改变。

X、管理Dialog:

  1、Dialog是和activity无关的,但是可以通过activity中的方法可以将其与创建的activity进行绑定。

    参考:http://ipjmc.iteye.com/blog/1266602,

    http://blog.csdn.net/caowenbin/article/details/5868665

  2、

三、任务,返回栈和启动模式:

  一个应用Application包含多个Activity。

  !!!默认启动模式下,用户通过点击主屏幕上的应用图标开启一个Task,之后开启的Activity都是在这个Task中进行的(包括调用其他的应用进行的操作,跨任务),之前的Activity并没有被销毁而只是停止(这就是为什么只调用onStop而没有调用onDestroy),并被压入返回栈(back stack)中,当点击返回键时,会对当前ctivity进行出栈并销毁。当用户在运行中点击Home键回到主屏幕时,刚才启动的Task将退到后台等待重新打开(这是android默认的多任务机制)。

  除了默认的启动模式,android还提供了另外三种模式可供选择,分别为standard,singleTop,singleTask,singleInstance。设置启动方式有两种方法:

    1、在相应的<Activity>中进行声明

         <activity android:name=".app.InterstitialMessageActivity"
android:label="@string/interstitial_label"
android:theme="@style/Theme.Dialog"
android:launchMode="singleTask"
</activity>

声明启动模式

    2、通过Intent中的标记来启动,主要使用的标记有:

      FLAG_ACTIVITY_NEW_TASK==singleTask,

      FLAG_ACTIVITY_SINGLE_TOP==singleTop,

      FLAG_ACTIVITY_CLEAR_TOP==singleInstance

  注意:通过Intent标记方式设置的启动模式将覆盖清单文件中的声明。

  关于四种启动模式的区别这里简要说明:

    1、standard:系统在启动 Activity 的任务中创建 Activity 的新实例并向其传送 Intent。Activity 可以多次实例化,而每个实例均可属于不同的任务,并且一个任务可以拥有多个实例。

    2、singleTop:如果当前Task的栈顶Activity就是要启动的,那么将调用onNewIntent()启动,而不是重新创建。实际测试生命周期方法回调如下:

    3、singleTask:系统创建新任务并实例化位于新任务底部的Activity但是,如果该 Activity 的一个实例已存在于一个单独的任务中,则系统会通过调用现有实例的onNewIntent方法向其传送 Intent,而不是创建新实例。一次只能存在 Activity 的一个实例。注:尽管 Activity 在新任务中启动,但是用户按“返回”按钮仍会返回到前一个 Activity。在注:即使使用了该模式也并不一定会开启新Task,还需要由taskAffinity来确定,这也是在<Activity>中声明的。

    4、singleInstance:该模式也会重新启动一个Task来运行Activity,该 Activity 始终是其任务唯一仅有的成员;由此 Activity启动的任何 Activity 均在单独的任务中打开。

  注意:这四种启动模式的存在是为了提高用户的体验,针对不同的情况可以选择不同的启动模式。

  参考:http://blog.csdn.net/zhangjg_blog/article/details/10923643

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0520/2897.html

http://developer.android.com/intl/zh-cn/guide/components/tasks-and-back-stack.html

零、源码解读

  开启一个activity的详细过程参考:http://ju.outofmemory.cn/entry/230403,

  说明:①在最后的具体方法中,使用Instrumentation来创建Activity实例;并且在生成Application时使用的是LoadedApk类的makeApplication(),但是其内部也是使用Instrumentation实现。

   ②调用Activity类通过重写onActivityResult()可以接受返回值,被调用Activity类使用setResult()返回结 果,有两种形式,一种只有返回值,一种带有数据。有requestCode/resultCode来区分请求/响应的Activity.参考:http://www.cnblogs.com/linjiqin/archive/2011/06/03/2071956.html

  ③开启过程中需要一个Intent意图对象,该对象有六个主要部分:六个主要组成部分来抽象描述的请求信息,它们是组件名称,行为,数据 / 数据类型,类别,附加信息和标示位,

Intent内部属性

参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-android-intent/, 

 有两个主要作用:

    ①找到需要打开的Activity,有两种方式:一种是指明需要打开的activity,称为显式Intent;另一种是隐式Intent,就是通过Activity在清单文件中的intent-filter来进行匹配开启的(使用到的是action,category,data即Uri来进行匹配),可以看到:action和category只有name属性,而data可以是URI的一部分进行匹配。

  注意:data中除了URI之外还可以是mimetype,但是设置会有问题:使用setType可以设置mimetype进行匹配,但是该方法会将data数据值为null,反之亦然。可以使用setDataAndType同时设置。

intent源码
intent-filter配置示例

参考:http://blog.csdn.net/xiao__gui/article/details/11392987,

  http://1137907860.blog.51cto.com/10452906/1678215. 

  Intent中定义了大量常量来记录标准的action,category,flag,等用于过滤Intent,关于常用参见下表:http://blog.csdn.net/yclfdn2004/article/details/44098747

      ②传递数据:Intent中有大量的putExtra()重载来进行数据的存储,对于基本类型(包括其数组)可以直接存储,但是存储对象有以下几种方式,但是有一个共同特点就是将对象进行了序列化(关于序列化详见后文)。

Intent传递对象

android学习笔记二、Activity深入学习的更多相关文章

  1. [转]NLog学习笔记二:深入学习

    本文转自:http://www.cnblogs.com/CCHUncle/p/5207735.html 配置文件 NLog所有的配置信息都可以写到一个单独的xml文件中,也可以在程序代码中进行配置. ...

  2. NLog学习笔记二:深入学习

    配置文件 NLog所有的配置信息都可以写到一个单独的xml文件中,也可以在程序代码中进行配置. 配置文件位置 启动的时候,NLog会试图查找配置文件完成自动配置,查找的文件依次如下(找到配置信息则结束 ...

  3. 【Python学习笔记二】开始学习啦!如何在IDEA中新建python文件

    1.新建module   2.选择本地安装的python   3.右键新建的module,创建python file就可以开始编程了   4.有时候回出现无法识别python内建函数的问题,就是运行没 ...

  4. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  5. Linux学习笔记(二) 文件管理

    了解 Linux 系统基本的文件管理命令可以帮助我们更好的使用 Linux 系统,以下介绍几个常用的文件管理命令 1.pwd pwd 是 Print Working Directory 的简写,用于显 ...

  6. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  7. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  8. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  9. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  10. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

随机推荐

  1. 虚拟集群LVS及DR模式搭建笔记

    LVS(虚拟集群Linux Virtual Server) LVS-NAT:地址转换,数据包来回都要经过NAT转换,所以Director Server(即LVS服务器)将成为系统瓶颈.使用NAT模式将 ...

  2. solr + eclipse 调试环境搭建

    1: 在官网下载对应源码 http://www.fayea.com/apache-mirror/lucene/solr/4.1.0/ 选择源码文件,如图所示: 2: 解压后目录如图所示: 在根目录下存 ...

  3. SolrCloud怎样创建跟新索引信息

    发送leader,由leader定位地址.然后写到shard上,同一时候copy到replicaton . 如图

  4. mysql-高级语言语法

    一.注释 从#字符到行尾 从'-- '序列到行尾.两个破折号之后至少要有一个空格符或制表符. 二.设置变量 用户变量的形式为@var_name,其中变量名varname可以有当前字符集的文字数字字符. ...

  5. Hibernate_9_Person和IdCard实例_一对一关系:基于主键

    1)建立Person类:(与8同样) 2)建立IdCard类:(与8同样) 3)建立持久化类:  1>保存方法(与8同样)  2>获取方法(与8同样)  3>删除方法(与8同样)   ...

  6. Delphi的时间 x87 fpu control word 精度设置的不够

    在win7 64位系统下, 一个DELPHI写的DLL注入一个C语言程序后. 出现非常奇怪的浮点数相加出错的情况. (注: 在XP系统下是正常的).比如: 40725.0001597563 + 0.7 ...

  7. django admin显示多对多字段

    参考文档https://jingyan.baidu.com/article/4e5b3e190f55c591901e24b3.html admin.py from .models import *cl ...

  8. EntityFramework学习笔记1--安装

    1.新建项目 2.工具=>NuGet程序包管理器=>程序包管理控制器 3.PM> Install-Package EntityFramework 安装EF

  9. 泪奔,配好了bioconductor环境

    最近因为极度忙,没有写总结.今天补一下总结. 今天完成关静最后给的大project这个作业来说,结合自己的研究方向是个让我纠结一周多的事.好在找到了对应的研究内容. R的书目前还是很多的.R我一开始觉 ...

  10. PostgreSQL相关总结

    源码安装PostgreSQL总结 简明安装步骤(其中prefix指定PostgreSQL的安装目录,该目录与数据目录pgdata和PostgreSQL的源代码包目录均无关) yum -y instal ...