2011-04-23 4 views
2

나는 사용자 위치를 5 분마다 얻은 안드로이드 응용 프로그램을 코딩하여 데이터베이스에 저장하고 서버에 보냅니다. 내가 그 일을 여러 가지 방법을 읽고 Android 백그라운드 서비스 및 AlarmManager

, 나는 다음을 수행 거라고 :

  1. 사용자는 메인 UI의 활동이 서비스를 시작 응용 프로그램
  2. 를 시작합니다.
  3. 서비스는 백그라운드에서 실행되며 gps를 계속 켜고 끄고 데이터베이스에 저장할 스레드를 새로 만들고 서버에 데이터를 보냅니다.

그러나 나는 그것이 "원격 서비스"(http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ 함께 할 수있는 것을 보았다 RemoteService.html) 또는 AlarmManager를 사용하여 5 분마다이 서비스를 시작하도록 예약하십시오.

서비스가 항상 실행되어야합니다. 간격 (5 분)마다 실행해야합니다.

내가 여기에 약간의 명확성이 필요하다고 생각합니다.

는 데이터베이스에 저장에게, 나는 사용자의 위치를 ​​5 분마다 취득하는 안드로이드 응용 프로그램을 코딩하고

답변

5

, 당신의 도움을 주셔서 감사 서버로 전송합니다.

사용자가 위치 제공 업체를 선택할 수있게하십시오. 모든 사람들이 자신의 기기에 GPS가있는 것은 아닙니다. 누구나 GPS를 사용할 수있는 것은 아닙니다. 그리고 모든 사람들이 5 분마다 GPS가 켜지는 것을 원하지는 않습니다.

"폴링 안함 - 활동에서 수동으로 정보를 새로 고칩니다"를 포함하여 폴링 기간을 선택할 수있게하십시오. background data setting (ICS에서 제외)을 기려 주시기 바랍니다.

나는 여기서 약간의 명확성이 필요하다고 생각한다. 폴링은 활동이 전경에없는 경우에도 계속 될 것으로 예상되는 경우

, AlarmManager를 사용합니다. 그러나 AlarmManager을 사용하는 대부분의 요리법은 IntentService으로 실제 작업 (귀하의 경우 GPS 수정 및 네트워크 I/O)을 처리합니다. 이것은 GPS가 비동기 적이기 때문에 당신의 경우에는 작동하지 않을 것입니다 - 당신이 그것을 느끼면 언제든지 픽스를 얻을 수는 없습니다. 픽스를 얻으려면 오랜 시간이 걸릴 것이므로, 지연을 처리해야하고 결국에는 작업을 시간 초과해야합니다. 이를 수행하기 위해 Service을 작성하는 것은 possible이지만 까다 롭습니다. 특히 기기가 잠든 경우에도이 정보를 수집하는 것이 좋습니다.

그러나 활동이 포 그라운드에 있고 장치가 켜져있는 동안에 만 폴링이 계속 진행된다면 나는 Service으로 전혀 신경 쓰지 않을 것입니다. 액티비티에 postDelayed()을 사용하여 매 5 분마다 코드를 실행하도록 설정 한 다음 작업을 수행하십시오.

+0

대단히 감사합니다. 저는 AlarmManager를 사용할 것입니다. 응용 프로그램의 특성상 위치 제공 업체가 GPS 여야하며 폴링 기간을 선택할 수있는 옵션을 사용자에게 제공 할 것을 고려하고있었습니다.그러나 사용자가 "폴링하지 않음"을 선택하면 앱이 의미가 없습니다. – Ullfoll