zoukankan      html  css  js  c++  java
  • 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值大的将会先执行
  • 相关阅读:
    软件工程课程总结
    《构建之法》部分读书笔记
    软件工程课程作业
    本周软件工程课程感想
    软件工程课设迭代开发第八天
    软件工程课设迭代开发第五至七天
    软件工程课设迭代开发第四天
    软件工程课设迭代开发第三天
    软件工程课设迭代开发第二天
    Bresenham中点画圆法与二阶差分算法
  • 原文地址:https://www.cnblogs.com/huanyou/p/5079255.html
Copyright © 2011-2022 走看看