• 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值大的将会先执行
  • 相关阅读:
    leetcode笔记--7 Find the Difference
    数据挖掘:概念与技术--笔记1--度量数据的相似性与相异性
    leetcode笔记--6 Add Digits
    leetcode 笔记5 single number
    数据挖掘导论笔记2 数据集的类型
    **leetcode笔记--4 Sum of Two Integers
    vs2015-Cordova开发安卓应用环境搭建
    c#一些常用的方法集合
    c#根据ip获取城市地址
    asp.net mvc 无刷新加载
  • 原文地址:https://www.cnblogs.com/huanyou/p/5079255.html
Copyright © 2020-2023  润新知