2016-10-14 1 views
1

내가 서비스에서 서비스서비스중인 getExtras를 닫으면 앱이 다운되는 이유는 무엇입니까? <code>Activity</code>에서

Intent serv=new Intent(this, MyService.class); 
serv.putExtra("mac", "mac"); 
startService(serv); 

를 시작, 내가

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    String mac=intent.getExtras().getString("mac"); 
    return super.onStartCommand(intent, flags, startId); 
} 

그럼 내가 응용 프로그램을 죽일 매개 변수를 얻을, 응용 프로그램이 충돌하며,이 서비스는 또한 충돌합니다.

이 줄을 제거하면 응용 프로그램을 죽인 후에도 아무런 문제가 없으며 서비스도 계속 살아납니다.

String mac=intent.getExtras().getString("mac"); 

왜 앱이 다운 되나요?

+1

아마 로그 캣 출력과 질문을 수정해야! – OBX

답변

1

super.onStartCommand(intent, flags, startId)가 반환 START_STICKY 플래그가 있는지 항상 확인해야합니다 또한 serv.putExtra("mac", "mac");

를 작성해야 잘못된 의도 bleService.putExtra("mac", "mac");

에 엑스트라를두고하는, 문서에 따르면 다음과 같은 의미입니다.

"이 서비스의 프로세스가 시작될 때 (onStartCommand (Intent, int, int)에서 반환 된 후) 종료 된 다음 시작 상태로 둡니다 만 전달 된 인 텐트는 보유하지 않는 경우"입니다.

Intent은 다시 배달되지 않으므로 intent.getExtras()을 호출하면 NPE이 표시 될 수 있습니다.

onStartCommand()에서 Intent 반환에게 START_REDELIVER_INTENT 플래그를 다시 전송하려면 :

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    ... 
    return START_REDELIVER_INTENT; 
} 
도움을 찾고 있다면
0

당신은 대신이 엑스트라

if(getIntent().hasExtra("mac"){ 
    //do some stuff 
} 
기본적으로
+0

죄송합니다, 저의 오타가 있습니다. 마지막으로 문제를 발견했습니다. 앱을 종료하면 서비스가 다시 시작되고 의도는 null이됩니다. –