关于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_TASKFLAG_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肯定是被移除了的。等回去研究下,再继续总结。

 

 

原文地址:https://www.cnblogs.com/breezemist/p/3370155.html