내 앱에서 DownloadManager를 통해 데이터 파일을 다운로드하는 메커니즘을 구현 중입니다. 사용자가 다운로드를 시작하면 진행중인 다운로드를 취소 할 수있는 취소 버튼이 옆에 나타납니다.Android DownloadManager, 백업 파일 및 취소 된 다운로드
이러한 데이터 파일은 서버에서 주기적으로 업데이트되므로 사용자는 수시로 동일한 파일을 다시 다운로드하려고합니다. 파일 이름은 업데이트를 통해 안정적으로 유지됩니다.
다운로드 중에 사용자가 언제든지 취소를 클릭 할 수 있기 때문에 다운로드가 성공적으로 완료 될 때까지 이전 버전을 유지하려고합니다. 이를 위해 기존 파일의 이름을 바꾼 다음 다운로드를 시작합니다. 사용자가 다운로드를 취소 한 경우 (다운로드가 실패한 경우에도) 백업 파일을 원래 위치로 복원하려고합니다.
if (downloadManager.remove(reference) > 0) {
if (destFile.exists())
destFile.delete();
backupFile.renameTo(destFile);
}
내가 파일을 새로
는, 이전 파일이 다운로드를 시작하기 전에 이름이 변경됩니다 : 취소 버튼을 클릭하면 취소의 경우를 들어 , 나는 원래 실행하려면 다음 코드를 추가했다. 그러나 다운로드를 취소하면 부분 파일과 백업이 모두 사라집니다.나는 이미 FileObserver
을 사용하여 다운로드 진행 상황을 모니터링하므로 파일 삭제를 감시하고 로그 메시지를 생성하도록 확장했습니다. logcat에서 부분적으로 다운로드 한 파일이 삭제되고 백업의 이름이 변경된 다음 이름이 변경된 백업도 삭제된다는 것을 나타내는 동일한 파일에 대한 두 개의 삭제 이벤트가 표시됩니다.
충분히 생각해 보면, 분명히 DownloadManager는 백그라운드에서 삭제를 처리하기 때문에, 나는 그것이 일어날 것을 지켜봐야 할 필요가 있습니다. 그래서 위의 이벤트 처리기를 수정하여 파일 경로를 목록에 저장하고 아직 파일 작업을 수행하지 않았습니다. 그런 다음 내 FileObserver
을 수정하여 삭제 된 모든 파일을 목록과 비교했습니다. 일치하는 경우 백업 파일의 이름을 바꿉니다. 또한 각 작업에 로그 출력을 추가했습니다.
그러나 이벤트 순서는 여전히 동일합니다. 이제 부분적으로 다운로드 한 파일이 다운로드 관리자에 의해 삭제되고 FileObserver
이 트리거되어 백업 파일의 이름이 바뀝니다. 그 후에 백업 파일이 삭제됩니다.
다운로드 관리자가 지나치게 많은 것처럼 보입니다. 다운로드가 취소되면 다운로드 한 파일을 삭제 한 다음 실제로 사라 졌는지 확인한 다음 해당 경로의 파일을 계속 찾으면 삭제를 다시 시도합니다.
어떻게하면이 문제를 해결하고 다운로드 관리자가 다운로드하지 않은 파일을 삭제하지 못하게 할 수 있습니까?