2014-03-05 4 views
0

onDestroy() 서비스 메서드가 호출 될 때 NullPointerException의 보고서가 표시됩니다. 내가 이해하지 못하는 부분은 항상 Context.startService()으로 서비스를 시작하므로 항상 onStartCommand()을 호출해야하며 참조가 null이 아니어야합니다.서비스 onDestroy는 onStartCommand없이 호출했습니다.

내가 Context.stopService() 전화로 서비스를 종료 할 때 NullPointerException이 발생하지 않는다는 것을 언급 할 가치가 있습니다.

결론적으로이 프레임 워크는 onStartCommand()을 호출하지 않고 onDestroy()을 호출합니다. 나는 서비스가 파괴 될 것 같아서 프레임 워크에 의해 재시작 될 것이므로 onStartCommand()은 실제로 실행되지 않는다. 그러나 다시, 이것은 단지 추측입니다.

여기에 무슨 일이 벌어지고 있는지에 대한 아이디어가 있으십니까? 감사!

다음은 관련 코드입니다 : mNotificationManager =의 getService (이, Context.NOTIFICATION_SERVICE) 넣어

public class ServiceLocationListener extends Service 

    private NotificationManager mNotificationManager; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     super.onStartCommand(intent, flags, startId); 
     mNotificationManager = getService(this, Context.NOTIFICATION_SERVICE); 
     mNotificationManager.notify(SOME_NOTIFICATION_ID, someNotification); 
     ... 
     return START_STICKY; 
    } 

    @Override 
    public void onDestroy() { 
     mNotificationManager.cancel(SOME_NOTIFICATION_ID); <<<<<<<<< NPE 
     ... 
    } 
} 

답변

0

; onCreat()에서

+0

로컬로 재생산 할 방법이 없기 때문에 다음 릴리스에서 수정하려고 한 첫 번째 시도입니다. 그러나이 행동에 대한 통찰력은 무엇인지 알고 있습니까? –

+0

조금 이상하지만 메모리가 문제가되어 시스템이 제대로 시작하고 즉시 파괴 할 수 없습니다. 하지만 Context.stopService()를 호출하면 nullpointer를주지 않는 것처럼 언급 한 것 같습니다. 따라서 귀하의 서비스와 같은 수단은 한 번 올바르게 실행됩니다. 권리? – Ankit

+0

맞습니다. stopService는 잘 실행되기 때문에 onStartCommand가 (내 코드가 아닌) 호출되지 않았고 따라서 npe라는 특별한 시나리오가 있습니다. 감사! –

관련 문제