站长手册

您现在的位置是:首页 > Android面试题 > 正文

Android面试题

Android Intent 的使用

ghjk2020-07-07Android面试题74
在一个Android应用中,主要是由一些组件组成,(Activity,Service,ContentProvider,etc.)在这些组件之间的通讯中,由Intent协助完成。正如网上一些

在一个 Android 应用中,主要是由一些组件组成,( Activity,Service,ContentProvider,etc.) 在这些组件之间的通讯中,由 Intent 协助完成。


正如网上一些人解析所说, Intent 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述, Android 则根据此 Intent 的描述,负责找到对应的组件,将 Intent 传递给调用的组件,并完成组件的调用。 Intent 在这里起着实现调用者与被调用者之间的解耦作用。


Intent 传递过程中,要找到目标消费者(另一个 Activity,IntentReceiver 或 Service ),也就是 Intent的响应者,有两种方法来匹配:


1 ,显示匹配( Explicit) : 


public TestB extents Activity


{


………


};


public class Test extends Activity


{


……


public void switchActivity()


{


Intent i = new Intent(Test.this, TestB.class);


this.startActivity(i);


}


}


代码简洁明了,执行了 switchActivity() 函数,就会马上跳转到名为 TestB 的 Activity 中。


2 ,隐式匹配 (Implicit): 


隐式匹配,首先要匹配 Intent 的几项值: Action, Category, Data/Type,Component


如果填写了 Componet 就是上例中的 Test.class) 这就形成了显示匹配。所以此部分只讲前几种匹配。匹配规则为最大匹配规则,


1 ,如果你填写了 Action ,如果有一个程序的 Manifest.xml 中的某一个 Activity 的 IntentFilter 段中定义了包含了相同的 Action 那么这个 Intent 就与这个目标 Action 匹配,如果这个 Filter 段中没有定义 Type,Category ,那么这个 Activity 就匹配了。但是如果手机中有两个以上的程序匹配,那么就会弹出一个对话可框来提示说明。


Action 的值在 Android 中有很多预定义,如果你想直接转到你自己定义的 Intent 接收者,你可以在接收者的 IntentFilter 中加入一个自定义的 Action 值(同时要设定 Category 值为”android.intent.category.DEFAULT” ),在你的 Intent 中设定该值为 Intent 的 Action, 就直接能跳转到你自己的 Intent 接收者中。因为这个 Action 在系统中是唯一的。


2,data/type ,你可以用 Uri 来做为 data, 比如 Uri uri = Uri.parse(http://www.google.com );


Intent i = new Intent(Intent.ACTION_VIEW,uri); 手机的 Intent 分发过程中,会根据http://www.google.com 的 scheme 判断出数据类型 type


手机的 Brower 则能匹配它,在 Brower 的 Manifest.xml 中的 IntenFilter 中首先有 ACTION_VIEW Action, 也能处理 http: 的 type ,


3 ,至于分类 Category ,一般不要去在 Intent 中设置它,如果你写 Intent 的接收者,就在Manifest.xml 的 Activity 的 IntentFilter 中包含 android.category.DEFAULT, 这样所有不设置 Category( Intent.addCategory(String c); )的 Intent 都会与这个 Category 匹配。


4,extras (附加信息),是其它所有附加信息的集合。使用 extras 可以为组件提供扩展信息,比如,如果要执行 “ 发送电子邮件 ” 这个动作,可以将电子邮件的标题、正文等保存在 extras 里,传给电子邮件发送组件。


 

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~