0

매니페스트에서 이와 같이 선언 할 때 해당 유형의 의도를 수신하면 서비스가 실행될 것입니다 (아직 실행되고 있지 않은 경우)? 이것은 Android Oreo 8.0에서도 같은 방식으로 작동합니까?Android 서비스 및 인 텐트 필터

<service 
     android:name=".MyFirebaseMessagingService"> 
     <intent-filter> 
      <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
     </intent-filter> 
    </service> 

답변

1

해당 유형의 의도를 수신하면 서비스가 실행될 것입니다 (아직 실행되고 있지 않은 경우).

"보장"은 강력한 용어입니다. 일반적으로 진술 내용이 사실입니다. 가되지 않습니다 시나리오는 다음과 같습니다

  • 누군가가 그냥 액션 문자열로 암시 적 Intent, 하나를 사용하여 서비스를 시작하려고합니다. 대부분의 기기에는 <intent-filter>과 함께 여러 서비스가 제공되며,이 경우 안드로이드는 시작할 서비스 중 하나를 선택합니다. 이러한 상황을 피하기 위해 암시 적 Intent을 사용하는 바인딩은 Android 5.0 이상에서 금지됩니다.

  • PackageManagersetComponentEnabledSetting()을 사용하여 런타임에 구성 요소를 비활성화 한 경우.

이 일 안드로이드 오레오 8.0에 같은 방식으로합니까?

나는 안드로이드 8.0에서 <intent-filter>의 동작이 변경되었음을 알지 못합니다. <service>. Android 8.0에서 서비스 (예 : 백그라운드에서 서비스를 시작할 수 없음)가 변경되었지만 변경 사항은 <intent-filter>의 존재 여부와 관계가 없습니다.

+0

서비스가 실행되지 않고 의도가 수신되면 서비스는 backgorund에서 시작됩니다. 맞습니까? 안드로이드 8.0은 당신이 말한 것처럼 이것을 허용하지 않기 때문에, 나는 무엇을 기대해야 하는가? 감사합니다 – notGeek

+1

@notGeek : "배경"의 결정은 서비스 자체의 관점이 아니라'startService()'또는'bindService()'를 호출하는 관점에서입니다. – CommonsWare

-1

다릅니다. 사용하는 서비스 유형에 따라 다릅니다.

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를 호출하여 결합 할 때 서비스가 바인딩().

안드로이드 오레오 이상에 대한 메모에서 알 수 있듯이 백그라운드 서비스에는 일정한 제한이 있습니다. 주제에 대한 자세한 내용은 Here을 참조하십시오.