关于Intent ,Task, Activity的理解
看到一篇好文章,待加工 http://hi.baidu.com/jieme1989/item/6e5f41d3f65be848ddf9beb9
第三篇 http://blog.csdn.net/luoshengyang/article/details/6714543
以前写ios程序时,想调用别的第三方程序,一般都是用到 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:appString]]; 调用后,系统就停在了启动后的第三方程序中,想回到以前的程序只能手动启动以前的程序。
后来发现Android中不是这样的,程序可以把第三方的程序的一个模块通过intent单独调用,按back钮就能回到之前的程序,用起来就好像一个程序。
如果想用好这个功能,就需要了解Intent,Task,Activity中重要参数的作用。
以上3个帖子就对这方面的知识进行了解释。
Intent 到底是什么呢,其实,最好的了解方式就是官方文档!请参阅google 的Intents and Intent Filters 说明,地址http://developer.android.com/guide/components/intents-filters.html
Intent的使用,使同一个程序中的各个Activity不相互依赖。正是因为它们之间没有紧耦合,我们才能顺利的把一个程序的activity“嵌入”到另一个程序中去。以前在ios写程序时,都先吧controller实例化,再把对象附上各式各样的自定义属性值,再present出来。Android中的Activity完全不走这个路线,启动一个Activity不能通过先实例话对象,而是通过使用Intent,这样,强制使你的代码松耦合。就感觉上说,对于一个小程序,ios的做法更加方便易懂,写起来很容易。但是就代码的规范度和重用性来说,android的做法更横一筹。
下面根据官方文档简单总结一下:
创建一个Intent有2中基本方法,一个是创建一个explicit Intent,你需要传入具体Component name(android中把activity,server,broadcast等叫做component),比如new Intent(context,xxxx.class));另一种是创建一个implicit Intent,利用intent的action值,比如new Intent("com.xx.zzzzzzzzz");
Intent的主要属性有,
Component name:用于指定启动对应的component,参见上文
Action:用于启动对应的component,参见上文
Data: 用于指定component可以处理的数据url和mimeType,和 intent-filter 中 data 标签配合使用
Category:用于指定component所属类别,和intent-filter 中 category 标签配合使用
Extras:用于向intent中添加信息
Flags:用于指定一些系统设置,比如FLAG_ACTIVITY_NEW_TASK,FLAG_ACTIVITY_SINGLE_TOP 等等。
提到Android就要一定要看看Task这个有意思的概念,这个Task与线程无关,在android是个stack,请仔细阅读官方 说明 Tasks and Back Stack ,地址 http://developer.android.com/guide/components/tasks-and-back-stack.html
以下摘抄一句Task技能带来的,ios不具备的机能说明 Even though the activities may be from different applications, Android maintains this seamless user experience by keeping both activities in the same task
这个stack的概念,让我想起了ios中的UINavigationController,这个可以容纳其他controller的“容器”,也应该有一个stack。不知道ios中除了nav Controller 外哪里还使用了stack,presentViewController 这个最基本的方法会吗?不断地present会像stack中不断地添加controller吗?present 一个controller后, 上一个controller的view会怎么样?被移除了还是放在了后面?Android 开始一个新Activity的话,上个Activity的view肯定是被移除了的。等回去研究下,再继续总结。
最新文章
- PPT图片双屏抽奖系统现场主要操作流程介绍
- avalon学习笔记
- js对象、数组转换字符串
- ORACLE创建表之前判断表是否存在与SQL Server 对比使用
- HTML5 实现橡皮擦的擦除效果
- poj 2239 Selecting Courses(二分匹配简单模板)
- TCP/IP的三次握手和四次分手以及超时机制
- 利用if else 求已发奖金总数
- sc delete 服务名
- 【redis】windows
- 忽然想到:把Mu的源代码一网打尽
- Flipping Game(枚举)
- ubuntu显卡驱动安装及设置
- mysql视图定义、原理、创建、使用
- iPhone 系统刷机
- 使用mybatis-generator工具自动生成mybatis代码
- PythonStudy——装饰器 Decorator
- Javascript - ExtJs - GridPanel组件
- Adams输出宏代码
- 使用.gitignore删除Github上的.idea文件
热门文章
- 【转】Kafka producer原理 (Scala版同步producer)
- 只有文本编辑器才是王道, 什么ide都是evil的浮云, 看看linus linux的内核开发工具vim emacs
- Linux启动管理:grub
- php 选择排序法
- Git命令家底儿及Git数据通信原理详解
- php防注入
- RelativeLayout布局
- hdu.1429.胜利大逃亡(续)(bfs + 0101011110)
- 第一节 HTML网页和CSS样式
- 63.Hbase 常用命令