onStartCommand에서 전달 된 Intent가 NULL이되는 이유


100

onStartCommand(Intent, int, int)시스템이 다음과 같은 플래그를 통해 서비스를 다시 시작하는 것 외에 전달되는 Intent가 NULL 이되는 다른 이유가 START_STICKY있습니까?

또한 시스템에서 서비스를 다시 시작할 때 Intent.getAction()메서드가 NULL을 반환하는 경우도 있습니다. 의도는 NULL이 아닙니다.getAction()

나도 여기서 물 었지만 아직 답변을받지 못했습니다.

업데이트 : Mark Murphy와 채팅 한 후, 그는 전체 인 텐트가 다시 시작된 후 전송되도록 대신 내 서비스 START_REDELIVER_INTENTonStartCommand()콜백으로 반환하도록 제안했습니다 START_STICKY.

서비스가 무언가를하려고한다면 그 중간에 서비스가 다시 시작 될까봐 걱정했기 때문에 처음에이 작업을하지 않았습니다. 나는 그것이 내가 책임 져야 할 논리라고 생각한다 :)


16
답변으로 질문을 수정하는 대신 답변을 추가하고 수락하여 질문이 답변되지 않은 질문 세트에 표시되지 않도록하십시오. 감사합니다.
Dale Wilson

2
비슷한 문제가있는 사람을위한 메모입니다. 나는 오류 얻을 보통 때 발견 intent이다 null에를 onStartCommand(), 그이 전에 로그 캣를 볼 수있는 다른 오류로 인해 발생합니다. 이유는 모르겠지만 이것이 내가 관찰 한 것이며 간과하기가 매우 쉽습니다.
Piotr Chojnacki

2
@DaleWilson 나는 싶지만이 질문은 진정으로 해결되지 않았습니다. 인 텐트가 null 인 이유 또는 START_REDELIVER_INTENT를 사용하지 않고 null 인 텐트를 피하는 방법에 대한 명확한 답변을받을 때까지 나는 대답을 받아 들일 수 없습니다.
rf43

@Mosquito 구체적으로 무엇이 오류를 던지고 있는지 알아 차리 셨나요?
rf43

1
@DDoSAttack 정말 중요하지 않습니다. 제 경우에는 예를 들어 NullPointerException활동 중 하나의 어딘가에있었습니다. 나중에 그것은 다른 오류였습니다. 이 오류가 발생하면서 실행중인 - -했다 그러나 두 경우 모두 내 스택 추적 내 서비스가 있음을 보여 주었다 intent였습니다 null귀하의 경우처럼. 나는 스택 추적을 위로 스크롤하기로 결정했을 때 무엇이 ​​잘못되었는지 꽤 오랫동안 생각하고 있었고 맨 위 어딘가에 내 진정한 오류가있는 것처럼 보였습니다. 이 문제를 해결 한 후 함께있는 사람도 null intent사라졌습니다.
Piotr Chojnacki

답변:


50

들어오는 플래그에 대한 논의가 없다는 것에 놀랐습니다. 다음과 같이 로그에서이를 모니터링 할 것입니다.

if (null == intent || null == intent.getAction ()) {
        String source = null == intent ? "intent" : "action";
        Log.e (TAG, source + " was null, flags=" + flags + " bits=" + Integer.toBinaryString (flags));
        return START_STICKY;
}

업데이트 : 플래그가 0이어서 실행 가능한 것이 없었습니다. 기능 손실없이 null 수표를 그대로 두었습니다.

편집 : 좋아, 모든 장소의 START_STICKY 문서에서 찾았습니다! "서비스에 전달 될 보류중인 시작 명령이없는 경우 null 인 텐트 개체와 함께 호출되므로주의해서 확인해야합니다."

http://developer.android.com/reference/android/app/Service.html


6
코 틀린에, 의도하지-널 (null)로 표시되며,이 응용 프로그램을 충돌override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {}
무하마드 데리

@MuhammadNaderi 당신은 의도를 만들 수 있습니다 Intent?. 나를 위해 일했습니다. 하지만 물론 null 인 텐트를 올바르게 처리해야합니다.
Patrick Boos

@PatrickBoos But then of course you need to correctly handle null intent; 무슨 말이야?! 어떻게? 감사.
Dr.jacky

나는 당신의 코드에서 onStartCommand(intent: Intent?, ...)그것이 작동해야 함을 의미 했습니다. 그런 다음 intent!!의도가 null인지 올바르게 확인하십시오.
Patrick Boos 2019
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.