代码之家  ›  专栏  ›  技术社区  ›  notGeek

Android服务和意向过滤器

  •  0
  • notGeek  · 技术社区  · 7 年前

    当我们在清单中声明类似的内容时,是否可以保证在收到该类型的意图时执行服务(如果它尚未运行)?这在Android Oreo 8.0上是否同样有效?

        <service
            android:name=".MyFirebaseMessagingService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   CommonsWare    7 年前

    是否保证在收到该类型的意图时执行服务(如果尚未运行)?

    “保证”是一个强有力的术语。 通常地 你的话是真的。不包括以下情况:

    • 如果有人尝试使用隐式 Intent ,只有那个动作字符串。最有可能的是,一台设备将具有多个与此相关的服务 <intent-filter> 在这种情况下,Android只需选择其中一项服务即可启动。请注意 结合 使用隐式 意图 在Android 5.0+上被禁止,以避免这种情况。

    • 如果您在运行时使用禁用组件 PackageManager setComponentEnabledSetting() .

    我不知道 <意向过滤器> 在…上 <service> 在Android 8.0中。有更改 服务 <意向过滤器> .

        2
  •  -1
  •   ADM    7 年前

    这取决于您使用的服务类型。

    1. 前景 -:前台服务执行一些用户可以注意到的操作

    2: 出身背景 :-后台服务执行用户未直接注意到的操作。例如,如果应用程序使用服务压缩其存储空间,则通常是后台服务。

    Note: If your app targets API level 26 or higher, the system imposes restrictions on running background services when the app itself is not in the foreground. In most cases like this, your app should use a scheduled job instead.
    

    3. 跳跃 当应用程序组件通过调用bindService()绑定到服务时,服务被绑定。

    所以正如你们在android Oreo或更高版本的注释中看到的,后台服务有一定的限制。有关此主题的更多信息,请阅读 Here .

    推荐文章