0

다른 활동에서 파일을 다운로드하려면 lingochamp filedownloader library을 사용하는 다운로드 관리자 앱을 개발 중입니다.Android Filedownloader 라이브러리 : 다운로드 한 파일의 목록/기록을 유지하는 방법은 무엇인가요?

여기서 다운로드 한 파일의 기록을 유지하려고하지만 a discussion here에 따르면 라이브러리는 이러한 파일 목록을 유지 관리하지 않습니다.

그래서 목록을 작성한 다음 Gson을 사용하여 json으로 변환하십시오. & 공유 환경 설정을 사용하여 저장하십시오.

다운로드가 시작되거나 일시 중지되거나 취소되거나 완료 될 때마다 json 문자열이 목록으로 다시 변환 된 다음 목록이 업데이트되어 json에 다시 저장됩니다. 그러나 동일한 목록에 액세스 할 여러 활동이 있으므로 동시성 문제로 인해 데이터가 일치하지 않을 수 있습니다.

그렇다면 어떻게 개발해야합니까? 아니면 위의 접근 방식이 잘못 되었습니까? 더 나은 접근 방법이 있습니까?

답변

0

onStart()와 onStop() 또는 onResume()/onPause() 사이의 환경 설정에만 액세스 할 때 동시성 문제가 없어야합니다. 하나의 활동 만이 해당 상태에있을 수 있기 때문입니다. 따라서 다른 스레드를 사용하여 환경 설정에 액세스하는 경우에만 발생할 수 있습니다. 그럼에도 불구하고 SharedPreferences는 변경하지 않고도이를 처리 할 수있을 것이라고 생각합니다. 적어도 나는 우리가 그것에 문제가 있다는 것을 알지 못한다.

어쨌든. 동시성 문제가있는 경우 SharedPreferences를 싱글 톤 객체로 래핑하고 히스토리 객체의 동기화 된 인스턴스에 액세스하고자 할 수 있습니다. 그런 다음 누군가가 데이터를 추가하고 히스토리 개체를 먼저 변경하면 다른 구성 요소가 액세스 할 수있게됩니다. 그런 다음 래퍼 인스턴스를 인스턴스화 할 때 환경 설정에서 데이터를 한 번만 읽으면됩니다.

또한이 데이터를 저장하려면 sqlite와 같은 것을 사용해야한다고 말해야합니다. 환경 설정에서이 값을 저장하면 SharedPreferences가 의도 한 것에 위배되므로 변경시 모든 데이터를 가져 와서 변경 한 다음 저장해야합니다. 또는 하나의 항목을 추가하십시오. 그렇다면 다시 한번 나는이 접근 방법을 한 번 이상 사용했음을 부인하지 않을 것이다. 그리고 소량의 데이터에 대해서는 잘 작동한다.