android学习笔记二、Activity深入学习
一、创建和使用:
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深入学习的更多相关文章
- [转]NLog学习笔记二:深入学习
本文转自:http://www.cnblogs.com/CCHUncle/p/5207735.html 配置文件 NLog所有的配置信息都可以写到一个单独的xml文件中,也可以在程序代码中进行配置. ...
- NLog学习笔记二:深入学习
配置文件 NLog所有的配置信息都可以写到一个单独的xml文件中,也可以在程序代码中进行配置. 配置文件位置 启动的时候,NLog会试图查找配置文件完成自动配置,查找的文件依次如下(找到配置信息则结束 ...
- 【Python学习笔记二】开始学习啦!如何在IDEA中新建python文件
1.新建module 2.选择本地安装的python 3.右键新建的module,创建python file就可以开始编程了 4.有时候回出现无法识别python内建函数的问题,就是运行没 ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- Linux学习笔记(二) 文件管理
了解 Linux 系统基本的文件管理命令可以帮助我们更好的使用 Linux 系统,以下介绍几个常用的文件管理命令 1.pwd pwd 是 Print Working Directory 的简写,用于显 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- JMX学习笔记(二)-Notification
Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
随机推荐
- 2019年北航OO第三单元(JML规格任务)总结
一.JML简介 1.1 JML与契约式设计 说起JML,就不得不提到契约式设计(Design by Contract).这种设计模式的始祖是1986年的Eiffel语言.它是一种限定了软件中每个元素所 ...
- 2015 Multi-University Training Contest 1 OO’s Sequence
OO’s Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- solr环境搭建&基本使用
分步指南 solr服务与tomcat整合 solr使用配置步骤 solr使用 推荐分词工具 相关的文章 一.Solr服务与tomcat整合 1.solr相关版本下载路径:http://archive. ...
- quick-cocos2d-x游戏开发【2】——项目结构分析、创建新场景
创建完一个新项目之后,我们能够简单的看一看这个项目的文件组成,有这么一个文件层次结构 几个proj.*目录就不用说了,是相应的平台的解决方式,res专门存放我们的游戏资源.scripts存放我们的lu ...
- mysql-汇总(聚集)函数
我们需要汇总数据而不用把他们实际检索出来,他们主要用来进行分析和报表数据的生成. 1.AVG:通过对表中行数计数并计算特定列值之和,求得该列的平均值.可用来返回所有列的平均值,也可以用来返回特定列或行 ...
- MYSQL源代码编译的变动
Mysql的安装,对于mysql不同版本号的mysql源代码编译方式不一样 5.6.2的版本号開始编译方式已经由 configure 变成了cmake方式 ,相关的新的 编译方式在mysql官网已经提 ...
- iOS 中client和server的 Web Service 网络通信 (1)
当你打开你手机上新浪微博应用或者知乎应用是.你是否会去想这些显示在手机上的图片和数据时从哪里来的?又是通过如何的方法实现的?好.那么接下来就介绍是如何实现的.过程又是怎么样的. 当我们浏览着 ...
- bzoj1055: [HAOI2008]玩具取名(dp)
1055: [HAOI2008]玩具取名 题目:传送门 简要题意: 就是固定四个字母,给出这四个字母分别可以由哪两个字母组成,然后在给你一个字符串,要求把这个字符串还原成原始的四个字母的其中一个. 题 ...
- Bootstrap-FileInput组件的简单Demo
官网: https://github.com/kartik-v/bootstrap-fileinput/ http://plugins.krajee.com/file-input HTML页面: ...
- Mac sublime快捷键操作
1.打开命令面板 command + shift + p 2.打开关闭side bar command + k , command + b 3.打开新sublime窗口 command + shift ...