안드로이드 DownloaderManager
를 사용하는 경우
SharedPreferences settings = getSharedPreferences("DownloadIDS", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putLong("downloadIds", downloadID);
editor.commit();
당신은 ID 나중에 검색 할 수는 시스템 서비스입니다. 항상 실행되고 있어야합니다. 그러나 실행할 수없는 경우가 있습니다.
다운로드는 HTTP 영구 연결을 통해 이루어집니다. 연속 된 HTTP 요청/응답에 동일한 연결이 사용됨을 의미합니다. 연결 끊기 오류가 발생하여 참조 ID별로 상태를 추적 할 수 없습니다.
너는 안드로이드 DownloadManager
서비스가 서버에서 STATUS
코드를 얻는 곳에 DownloadManager
서비스를 통해 추적한다.
Android DownloadManager는 content-length
기반 서버에서 다운로드를 사용합니다. Content-Length
헤더는 스트리밍을 허용하지 않습니다 (link). 콘텐츠 길이 기반 다운로드에는 이력서, 일시 중지, 부분 다운로드의 장점이 있습니다 (위의 link1 참조). 따라서 시스템을 다시 부팅 할 때도 다시 다운로드를 다시 시작합니다 (증가시킵니다).
content-length
기반 다운로드는 store and forward
(link)입니다. 고정 버퍼가 제한되어 있으므로 버퍼링 된 내용을 영구 저장소로 전달해야합니다.
안드로이드 DownloadManager
에는 ERROR_CANNOT_RESUME int
플래그 (link)가 있습니다. ERROR_CANNOT_RESUME
은 COLUMN_STATUS
플래그를 기반으로합니다. COLUMN STATUS에는 두 가지 유형이 있습니다. STATUS_PAUSED
또는 STATUS_FAILED
입니다. 시스템이 꺼지기 전에 시스템은 BroadcastReceiver
을 통해 안드로이드 DownloadManager
서비스를 종료합니다. Android DownloadManager
은 STATUS_PAUSED
플래그를 활성화합니다. 다음에 장치를 다시 시작하면 시스템 서비스가 자동으로 실행되고 STATUS_PAUSED가 다시 다운로드를 시작하는지 확인합니다.
답 : 거기 (클라이언트 측, 연결 또는 서버 측에서) 오류가 발생하거나 파일을 (이 STATUS_SUCCESSFUL
때까지 의미) 다운로드 완료되지 지금까지, 당신은 안드로이드 DownloadManager
에서 상태를 점점 계속. STATUS_FAILED
이 발생하면 상태를 알 수 없습니다. 다운로드가 재 시도되지 않는다고 말합니다 (link).
STATUS_FAILED
은 어떻게 발생합니까? 고객의 DownloadManager
서비스는 HTTP 상태 코드 4XX ( 클라이언트가 오류를 범됩니다 추측 서버) 및 5XX (서버 는 서버가 오류를 범됩니다 감지) (link), 지금 STATUS_FAILED
는 참이를 감지합니다.
어떤 다른 상황 : 때 클라이언트 유지 꺼진 및 서버 논리에 따라, 서버가 시간 초과와의 연결을 종료 할 수 있습니다. 따라서이 컨트롤은 명시 적으로 다른 HTTP 서버를 기반으로합니다. 우리는 여기서 여러 날을 물을 수 없습니다. 우리는 서버 측 로직을 모른다. status_codes는 서버를 기반으로합니다. 서버가 클라이언트가 실패했다고 결정하면 서버는 timeout
연결을 사용하여 서버 측에서 STATUS_FAILED
을 활성화합니다. 클라이언트는 TCP 연결이 임의의 시간에 사라 지도록 준비해야하며 연결을 다시 설정하고 HTTP 요청을 다시 시도 할 수 있어야합니다. 조기에 닫힌 연결은 오류로 처리되어서는 안됩니다. 연결을 재설정하려는 시도가 실패 할 경우에만 오류가 표시됩니다. 질문에 정확한 답변이 없습니다.
주 : TCP connections to disappear at arbitrary times
(link)는 해제 장치의 특정 기간 (일) 후 연결을 다시 시작할 수 있습니다 여기에 주요 논리이다.
1) STATUS_FAILED
에서 추가 데이터를 계속 추적 할 수 없습니다. 만약 COLUMN_STATUS
에
2)도 STATUS_FAILED
도 STATUS_PAUSED
이며,이 칼럼의 값이 정의되지, 여기에 추가로 데이터를 추적 할 수 없습니다.
- 위의 두 가지 조건 이외의 경우 다운로드가 진행 중입니다.
나는 동일한 질문을하고 있습니다 ... 내 생각 엔 사용자가 다운로드 관리자 앱에서 다운로드를 제거하지 않은 상태에서 데이터를 사용할 수 있다는 것입니다 (길게 누르면 삭제됨). – daramasala