내 앱에서 사용자가 위치 업데이트를 요청합니다. 이 경우 주 활동은 위치 요청을 시작할 서비스를 시작합니다.Service 및 IntentService의 위치 문제
내 문제는 서비스가 시작된 경우 2 분 안에 3 번 말하면 제대로 작동하지 않는다는 것입니다.
기본적으로 현재 시작이 완전히 끝날 때까지 시작 요청을 보류로 설정하는 서비스가 필요합니다.
서비스가 시작될 때마다 서비스가 완료 될 때까지 최대 10 분이 걸릴 수 있으며 서비스는 전달 된 의도 데이터를 기반으로 각 시작 요청에 다르게 응답합니다.
2 분 동안 발생한 세 가지 시작 요청 각각에 대해 하나의 위치 요청이 만족 스럽지만 실제로 의도 한 데이터는 세 가지 시작 요청 각각과 다를 수 있습니다.
그래서,이를 극복하고 세 가지 요청을 한 번에 하나씩 처리 할 수 IntentService를 사용하여 시도,하지만
LocationManager.requestLocationUpdates(...)
가 호출되지 않습니다. 나는 이것이 onHandleIntent (...)로 인해 거의 즉시 마무리 작업을 수행하고 본질적으로 위치 요청 시간에 응답하지 않기 때문이라고 생각합니다. 7 분 (테스트 3 분) 후에 위치 요청을 중지시키는 처리기가 있으며 사용자에게 UI 업데이트를 반환하는 다른 메서드에 위치 정보가 전달됩니다. UI 업데이트가 반환됩니다. 위치 업데이트가 실패하기 때문에 null입니다.
IntentService에서 onHandleIntent를 사용하여 내 서비스를 시작하고 인 텐트 데이터를 전달할 수 있다고 생각합니다.하지만 실제로는 좋지 않은 것처럼 보입니다. 더 나은 방법이있을 것입니다. 편집 : onHandleIntent가 내 locationService를 즉시 시작하므로 아무런 대기 기간도 없으므로 확실히 작동하지 않습니다.
또한 onHandleIntent 내에서 호출되는 토스트는 전혀 표시되지 않지만 내 onCreate()에서 나온 모든 것은 작동해야합니다.
나는이 문제에 대한 답변을 찾는 데 어려움을 겪고 있으며 도움을 주시면 대단히 감사하겠습니다. 내 코드의 요지는 다음과 같습니다.
public class myService extends IntentService {
public findMyDroidService() {
super("findMyDroidService");
}
@Override
protected void onHandleIntent(Intent intent){
intent.getExtras();
fromIntentString = intent.getStringExtra("toIntentStringExtra");
Toast.makeText(this, fromIntentString, Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Intent Handled", Toast.LENGTH_SHORT).show();
locMan.requestLocationUpdates(locListener,...);
}
@Override
public void onCreate(){
super.onCreate();
locListener = new LocationListener(){
//code goes here
}
}
}
또한 내 위치 수신기는 onCreate() 내에서 인스턴스화됩니다.
내 건배 문제에 대해 http://stackoverflow.com/questions/3955410/create-toast-from-intentservice를 찾았지만 토스트 것은 너무 신경 쓰지 않아서 시도하지 않았습니다. – Jakar