2017-01-22 9 views
1

내 아이디어는 간단합니다. 여러 장으로 구성된 전자 책 앱이 있습니다. 때때로 새로운 챕터가 서버에 업로드됩니다. 나는 서버에서 최신 챕터를 가져 와서 어쩌면 주 단위 또는 일 단위로 다운로드하기 위해 사용자의 휴대 전화에 백그라운드 서비스를 원합니다.Android - 서버에서 업데이트를 가져 오는 백그라운드 서비스 만들기

나는 람을 발견 한 후 AlarmManager + IntentService + BroadcastReceiver를 사용하려고했습니다. 앱이 사용자에 의해 종료되면 작동하지 않습니다. 나는 이것이 사용자가 메모리를 절약하고 사용 후 모든 응용 프로그램을 죽일 수있는 일반적인 행동이라고 생각합니다.

서비스와 응용 프로그램을 서로 다른 프로세스로 분할하여 백그라운드 서비스가 사용자에 의해 쉽게 종료되지 않도록 할 방법이 있습니까? , 예를 들어 적어도 보이지 않는 경우 내 전화 누르기 버튼을 클릭하면 설정 및보기로 이동하지 않는 한 실행중인 모든 응용 프로그램이 표시됩니다.

감사합니다.

+1

디버깅을 4 시간 이상 소비 한 후 장치 문제 인 것 같습니다. xiaomi와 같은 일부 중국 브랜드 스마트 폰은 사용자가 앱에 "자동 시작"권한을 명시 적으로 부여하지 않는 한 앱이 종료 되 자마자 자동으로 알람 관리자와 백그라운드 서비스를 중지합니다. Whatsapp 및 Line과 같은 잘 알려진 앱이 목록에 자동으로 추가되지만, 여전히 제한적일 수밖에 없다. –

답변

0

두 가지 해결책이 있습니다. 더 좋은 방법은 Sockets을 사용하는 것입니다. 그런 다음 안드로이드 장치에 대한 업데이트를 보내는 것은 서버의 책임입니다.

다른 방법은 서비스를 사용하는 것입니다. 서비스를 유지하기 위해 고려해야 할 몇 가지 사항이 있습니다. 처음으로 : 바운드 서비스를 사용하지 마십시오. 두 번째 : 전체 앱을 닫을 때 서비스를 다시 시작해야합니다 (배경이 아님). onTaskRemoved 방법으로 서비스 할 수 있습니다. 그것은 당신을 도울 것입니다 :

@Override 
public void onTaskRemoved(Intent rootIntent) { 
    Intent restartServiceIntent = new Intent(this, yourService.class); 
    restartServiceIntent.setPackage(getPackageName()); 
    PendingIntent restartServicePendingIntent = PendingIntent.getService(this, 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT); 
    AlarmManager alarmService = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarmService.set(
      AlarmManager.ELAPSED_REALTIME, 
      SystemClock.elapsedRealtime() + 5000, 
      restartServicePendingIntent); 

    super.onTaskRemoved(rootIntent); 

} 

당신을 도울 수 있는지 말해주십시오. 다른 질문을 주저하지 말고

+0

sorry.that은 오타였습니다. "바운드 서비스"를 의미했습니다. developer.android.com에서 정의를 볼 수 있습니다. 바운드 서비스를 사용하면 바인딩 된 구성 요소가 존재할 때까지만 작동합니다. – Nahid