앱이 포그라운드에 있는 경우 대체 작업을 위한 디자인 패턴은 무엇입니까?

StackOverflow https://stackoverflow.com//questions/22001844

  •  20-12-2019
  •  | 
  •  

문제

푸시 알림을 받기 위해 Google Cloud Messaging을 활용하는 작업을 구축 중입니다.

여기에는 다음과 같은 몇 가지 주목할만한 구성 요소가 포함됩니다.

  • WakefulBroadcastReceiver GCM으로부터 메시지를 수신합니다.
  • IntentService GCM 이벤트가 수신되면 알림을 받습니다.

많은 애플리케이션의 경우가 그러할 것이라고 확신하므로 애플리케이션이 포그라운드에 활동이 있을 때와 포그라운드에 활동이 있을 때 다른 접근 방식을 취하고 싶습니다.응용 프로그램이 수행되면 ~ 아니다 포그라운드에 애플리케이션이 있습니다.

애플리케이션이 활성화되지 않은 경우 알림 창에 알림을 게시하고 애플리케이션이 활성화된 경우 이벤트를 포그라운드 활동으로 전달하고 싶습니다.

이에 대한 디자인 패턴이 있습니까?앱이 포그라운드에 있는지 아니면 포그라운드에 있는지 어떻게 확인해야 하나요?배경?

도움이 되었습니까?

해결책

다음에 설명된 접근 방식을 따를 수 있습니다. 이 블로그 게시물 당신이 만드는 곳 BroadcastReceiver 당신의 Activity 양수 우선순위(즉, 기본값보다 높음) 0) 특정 작업을 가로채서 호출합니다. abortBroadcast - 앱 오픈 케이스를 처리합니다.그런 다음 BroadcastReceiver 동일한 작업을 처리하지만 기본 우선순위로 매니페스트에서 - 앱이 열려 있지 않고 시스템 알림을 생성하는 경우의 대체 조치입니다.

그런 다음 사용 sendOrderedBroadcast() 등록된 모든 수신자에게 우선순위에 따라 방송을 보냅니다.활동이 열려 있으면 첫 번째 활동이 이를 처리합니다.그렇지 않으면 다른 것으로 기본 설정되고 알림이 생성됩니다.

다른 팁

제가 제안하는 방법은 다음과 같습니다.

서비스에 GCM에 관한 모든 로직이 있어야 합니다(저는 한 번도 사용해 본 적이 없습니다). IntentService, 그래서 나는 그것이 배짱인지는 모르지만 그것이 다음에서 상속받은 것으로 보입니다. Service).

귀하의 활동에는 아마도 서비스를 시작하는 방법이 있을 것입니다(아마도 사용자가 버튼을 통해 활성화할 수도 있음). 여기서는 새로운 것이 아닙니다.

여기에 재미있는 부분이 있습니다.귀하의 활동에서 귀하가 처리하는 onPause() 그리고 onResume().~ 안에 onResume()묶다 서비스에.바인딩 메커니즘을 사용하면 서비스에 대한 포인터를 얻고 서비스에 있음을 알릴 수 있습니다.안녕하세요 서비스님, 저는 활동 중이고 여기 있어요...나 자신을 가리키는 포인터를 어딘가에 저장해 주세요"이고 서비스는 활동에 대한 포인터를 저장합니다(이를 호출하겠습니다). mActivity).당신의 onPause() 서비스를 떠난다는 사실을 알리면 서비스가 설정됩니다. mActivity = null, 그리고 당신은 바인딩 해제 서비스에서.

이 메커니즘을 사용하면 서비스가 푸시 알림을 받을 때마다 mActivity 바인딩된 활동이 있는지 확인하는 변수입니다.활동에 대한 포인터를 사용하면 해당 활동의 메소드를 호출하고 정보를 전달할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top