一、创建和使用:

  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. 使用vuex的流程随笔

    1.在建好的vue项目中新建一个vuex文件夹在此文件夹下建一个index.js文件,在此文件下引入vuex 模块(当然需要先npm下载)和vue模块,在引入你所有的自定义的module.js模块(下 ...

  2. [terry笔记]11gR2_DataGuard搭建_拷贝数据文件

    11gR2搭建dataguard环境: 自己做的实验,后续按照rman模式搭建.主备切换.模式调整等实验会陆续发上来. primary: OS:oel 6.4 database:11.2.0.4.0 ...

  3. 严重: 文档无效: 找不到语法。 at (null:2:19)

    1.错误描写叙述 严重: 文档无效: 找不到语法. at (null:2:19) org.xml.sax.SAXParseException; systemId: file:/D:/MyEclipse ...

  4. YTUOJ-计算该日在本年中是第几天(用户自己定义类型)

    题目描写叙述 定义一个结构体变量(包含年.月.日).编写一个函数days,由主函数将年.月.日传递给函数days,计算出该日在本年中是第几天并将结果传回主函数输出. 输入 年月日 输出 当年第几天 例 ...

  5. 【金阳光測试】基于控件核心技术探讨---Android自己主动化系列(2)---2013年5月

    第一讲分享了下安卓自己主动化一些概况和一些自己主动化框架现状和技术可以解决什么样的问题. 这次课就深入到android世界里面.遨游.翱翔.深入了解自己主动化測试核心技术. 搞过编程开发的同学听到in ...

  6. Getting Started with MongoDB (C# Edition)

    https://docs.mongodb.com/getting-started/csharp/ 概览 Welcome to the Getting Started with MongoDB guid ...

  7. windows下git的安装和使用

    git到底是个什么东西,我这里就不介绍了,如果大家还有不懂的,可以去百度一下的.我这里给一个介绍的网址:git简介        这里在留一个地址http://baike.baidu.com/subv ...

  8. Spring Boot AutoConfiguration注解@ConditionalXXXX之前生今世

    1.注解@Conditional的定义 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHO ...

  9. 1570. [POJ3461]乌力波

    ★☆   输入文件:oulipo.in   输出文件:oulipo.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 法国作家乔治·佩雷克(Georges Perec,1 ...

  10. AES简单加密解密的方法实现

    package com.mstf.aes; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyEx ...