내 활동 (A라고 함)은 IntentService (IS라고 함)를 큰 작업 (T라고 함)의 한 단계로 시작합니다. IS는 1 시간 이상 실행할 수 있습니다. 그것이 끝나면 어떻게 든 A에게 말해야합니다. 그래서 A는 T 작업의 다음 단계를 밟을 수 있습니다. 그러나 IS가 끝날 때까지는 사용자가 A를 모두 죽이는 등 많은 일을했을 수도 있습니다. 그럼에도 불구하고 사용자가 다시 시작하면 A는 IS가 완료되었음을 인식해야하므로 A가 T 작업에서 다음 단계를 수행 할 수 있습니다.IntentService에서 현재 실행 중이 아닌 활동으로 통신하는 방법은 무엇입니까?
IS에서 A로 통신하는 방법에 대한 많은 제안 사항이 있습니다. 의도, PendingIntent, 브로드 캐스트 및 리시버, ResultReceiver, Messenger thread 등등. [간단한 검색 결과를 보여주기 때문에 링크를 제공하지 않았습니다.] 그러나 모두 메시지가 전송 될 때 A가 살아 있다고 가정합니다. 그것은 단순히 사망 한 A에게 메시지를 보낼 수없는 것 같습니다.
또는 그럴 수 있습니까?
SharedPreferences는 IS에서 A로 메시지를 지속시키는 방법 일 수 있습니다. 끝나면 IS는 SharedPreferences에서 플래그 F를 설정합니다. 이제 F는 F가 설정되어있을 때 A가 죽은 경우에도 지속됩니다. 사용자가 A를 다시 시작하면 F를 확인합니다. F가 설정되면 A는 IS가 완료되었음을 알게되고 이제는 A가 작업 T에서 다음 단계를 수행 할 수 있습니다.
또한 A에 SharedPreferences Listener가 있으면 IS가 신호를 보낼 수 있습니다 A가 죽었거나 살아 있는지 여부. IS는 의사 소통의 수단을 전혀 필요로하지 않습니다.
실제로 SharedPreferences라고 생각됩니다. 메시지가 간헐적으로 짧고 짧은 경우에만 청취자가 일반적으로 의사 소통 및 조정을위한 가장 좋은 방법 일 수 있습니다.
의미가 있습니까? SharedPreferences는 메시징 용으로 설계되지 않았으므로 일부 숨겨진 결과가 두려워합니다. 어떻게 생각해? 것 같다
IS-to-A 통신에 LocalBroadcastManager를 사용했지만 A가 활성 상태라고 가정합니다. 나는 Otto를 점검했다. 그리고 그것은 좋게 보인다. 그러나 나는 문제가있다. 나는 다른 라이브러리를 사용할 때마다 dex 한계를 불어 난다. 그래서 이미 사용하고있는 시설을 다시 사용하는 것이 매력적입니다. SharedPreferences (SP)와 청취자를 사용하는 "Gotcha"가 없으면 매우 매력적입니다. 디스크 I/O 문제는 미미합니다. 결국 IS는 1 시간 이상 실행됩니다. 디스크 I/O의 10 분의 1은 사용자가 알 수 없습니다. 나는 SP를 시도 할 것 같아. 행운을 빌어! 답장을 보내 주셔서 감사합니다. 나는 정말로 당신의 책과 다른 사람들을 돕는 것에 대한 열정에 감탄했습니다. – BinCodinLong