Android四大组件之Intent(续2)

  1、你如何通过一个intent来唤醒activity?

  this.startActivity(intent,request);
     2、什么是显式、隐式的intents?
  显式:指定组件名,通常用于项目内部使用。
       隐式:并不指定目标的名字(组件名字字段是空的)。隐式intent经常用于激活其它应用程序中的组件
     3、intent的组成?
  

  Intent对象由以下六个部分组成:

  Component name:Component name即组件名称,是要处理这个Intent对象的组件名称

  Action:Action是指Intent要完成的动作,是一个字符串常量。ACTION_CALL

  Data:Data属性是执行动作的URI和MIME类型,不同的动作有不同的数据规格

  Category:Category是一个字符串,提供了额外的信息,有关于能够处理这个Intent对象的组件种类

  Extras:传递给Intent的额外数据,以Bundle的形式定义,就是一些键值对。

  Flags:各种类型的Flag。很多是用来指定Android系统如何启动activity,还有启动了activity后如何对待它


     4、你如何通过intent想接收intent的组件传入数据。
    activity.getIntents
    service.getIntents

     5、你能说出android应用中的主要组件吗?
   4大组件,activity,service,broadcast,contentprovider,其中前面三个都与intent有关。
     6、intent中的data部分是直接包含数据吗?
    不是,一般是uri或者minetype
     7、intent中的action部分可以直接引用activity或其他组件吗?
  不会,这个一般在Component name
     8、当指明intent中类名时,其它部分如何处理?
  不需处理,这个是显示intents,会直接启动该类,activity或者service一般情况下。
     9、action.MAIN有什么含义?
   表明启动的activity是root 在task中。
     10、如果你在intent filters中不指定任何action,是否意味着其可以与所有action相匹配?
   如果一个filter 没有指定任何action ,那么则没有任何intent会被匹配
     11、如果在intent filter中不指定data,那么什么样的intents可以与之匹配?
    一个既不包含URI也不包含数据类型的意图对象仅在过滤器也同样没有指定任何URIs和数据类型的情况下才能通过测试。
     12、在你的intent filter中加入一个default category为何很有必要?
    应为默认情况下,intent不指定category就是default category
     13、你的laucher activity需要default category吗?
    不需要,应该使用category launch
     14、你如何唤醒一个可以返回给调用者数据的activity?
    ACTION_PICK
     15、唤醒一个activity最快的方法是什么?
  
     16、action_pick和action_get_content的区别是什么?
    action_pick是指定compont,由该compont返回指定的minetype
    action_get_content是固定minetype,由android系统自动搜索可以满足该要求的activity。
附录:
  动作测试(Action test)

  一个意图对象只能指定一个动作名称,而一个过滤器可能列举多个动作名称。如果意图对象或过滤器没有指定任何动作,结果将如下:

  • 如果过滤器没有指定任何动作,那么将阻塞所有的意图,因此所有的意图都会测试失败。没有意图能够通过这个过滤器

  • 另一方面,只要过滤器包含至少一个动作,一个没有指定动作的意图对象自动通过这个测试

  类别测试(Category test)

  对于一个能够通过类别匹配测试的意图,意图对象中的类别必须匹配过滤器中的类别。这个过滤器可以列举另外的类别,但它不能遗漏在这个意图中的任何类别。

  原则上一个没有类别的意图对象应该总能够通过匹配测试,而不管过滤器里有什么。大 部分情况下这个是对的。但有一个例外,Android把所有传给 startActivity()的隐式意图当作他们包含至少一个类别:"android.intent.category.DEFAULT" (CATEGORY_DEFAULT常量)。因此,想要接收隐式意图的活动必须在它们的意图过滤器中包 含"android.intent.category.DEFAULT"。(带"android.intent.action.MAIN" 和"android.intent.category.LAUNCHER"设置的过滤器是例外)

  数据测试(Data test)

  当一个意图对象中的URI被用来和一个过滤器中的URI比较时,比较的是URI的 各个组成部分。例如,如果过滤器仅指定了一个scheme,所有该scheme的URIs都能够和这个过滤器相匹配;如果过滤器指定了一个scheme、 主机名但没有路经部分,所有具有相同scheme和主机名的 URIs都可以和这个过滤器相匹配,而不管它们的路经;如果过滤器指定了一个scheme、主机名和路经,只有具有相同scheme、主机名和路经的 URIs才可以和这个过滤器相匹配。当然,一个过滤器中的路径规格可以包含通配符,这样只需要部分匹配即可。

 

  数据测试同时比较意图对象和过滤器中指定的URI和数据类型。规则如下:

  a. 一个既不包含URI也不包含数据类型的意图对象仅在过滤器也同样没有指定任何URIs和数据类型的情况下才能通过测试

  b. 一个包含URI但没有数据类型的意图对象仅在它的URI和一个同样没有指定数据类型的过滤器里的URI匹配时才能通过测试。这通常发生在类似于mailto:和tel:这样的URIs上:它们并不引用实际数据。

  c. 一个包含数据类型但不包含URI的意图对象仅在这个过滤器列举了同样的数据类型而且也没有指定一个URI的情况下才能通过测试。

  d. 一个同时包含URI和数据类型(或者可从URI推断出数据类型)的意图对象可以通过测试,如果它的类型和过滤器中列举的类型相匹配的话。如果它的URI和 这个过滤器中的一个URI相匹配或者它有一个内容content:或者文件file: URI而且这个过滤器没有指定一个URI,那么它也能通过测试。换句话说,一个组件被假定为支持content:和file: 数据如果它的过滤器仅列举了一个数据类型。

posted on 2015-01-10 15:03  Joyfulmath  阅读(281)  评论(0编辑  收藏  举报

导航