Intent

今天主要看了一下Intent的Google API文档,也做了一些实验,实验的部分内容可以参考另一篇博客Android 自己写一个打开图片的Activity

有以下的体验。

创建Intent的时候有两种方式:显式Intent和隐式Intent

  • 显式Intent:创建的时候指定包名、类名等具体信息。可以使用Intent(Context packageContext, Class<?> cls)、setComponent(ComponentName component)来创建。
  • 隐式Intent:通过Action、Category、MineType等信息,系统根据这些信息找到对应的Component,有可能找不到,这时会报错;也有可能会找到多个,如果是调用Activity,则会把所有对应的Activity提供给用户选择;如果调用的是Service,则调用priority最大的那个;如果是Receiver,则会调用所有的相应Component。

    

需要注意以下几点:

  • 在操作Intent的时候,如果想要同时使用Data和MineType,则一定要使用setDataAndType方法,因为setData和setType会将对方设为null
  • 在使用隐式Intent调用Activity的时候,如果系统找不到Activity,就会报错,程序也会因此而崩溃。可以使用resolveActivity判断是否能够找到与这个Intent对应的Activity,例如下面代码中的判断。而Service和Receiver如果找不到,则不会抛出异常。
// Verify that the intent will resolve to an activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(sendIntent);
}
  • 在创建Service的时候,最好通过显示Intent来创建,这样会更加安全。如果使用隐式Intent,找到多个Service,则会根据IntentFilter的priority的值来调用,调用priority值最大的一个。

priority修饰intent-filter标签时,需要注意的地方:

  • 修饰Activity 并且值为负值时,Activity不会被调用;匹配多个Activity,并且值都为正,不管priority的大小,都会提供给用户选择
  • 修饰Service 时,不管值的正负都会加入判断,priority值最大的将会被调用
  • 修饰Receiver 时,不管值的正负都会执行,priority值大的将会先执行
原文地址:https://www.cnblogs.com/huanyou/p/5079255.html