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


100

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

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

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

업데이트 : Mark Murphy와 채팅 한 후, 그는 전체 인 텐트가 다시 시작된 후 전송되도록 대신 내 서비스 START_REDELIVER_INTENT의 onStartCommand()콜백으로 반환하도록 제안했습니다 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.