정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows Phone 8의 백그라운드 파일 전송 모범 사례

2014-06-18

적용 대상: Windows Phone 8 및 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

 

이 항목에서는 백그라운드 파일 전송 기능을 사용하는 응용프로그램을 위한 일반 지침과 모범 사례를 설명합니다. 백그라운드 전송 서비스에 대한 소개와 이 서비스의 기술적 제한 사항에 대한 정보는 Windows Phone 8의 백그라운드 파일 전송를 참조하세요. 백그라운드 파일 전송을 사용하는 응용프로그램을 만드는 단계별 연습은 Windows Phone 8의 백그라운드 파일 전송을 구현하는 방법을 참조하세요.

중요중요:

일반 응용프로그램의 요구 사항 외에, 백그라운드 파일 전송을 사용하는 응용프로그램이 스토어 에 표시되려면 충족해야 하는 추가 인증 요구 사항이 있습니다. 응용프로그램을 디자인하고 구현할 때 이러한 요구 사항을 고려해야 합니다. 자세한 내용은 Windows Phone의 특정 앱 유형에 대한 추가 요구 사항을 참조하세요.

이 항목에는 다음 단원이 포함되어 있습니다.

 

백그라운드 파일 전송 기능을 사용하는 대부분의 응용프로그램은 다음과 같은 공통된 개발 작업을 구현합니다.

  • 응용프로그램을 실행한 후

    • BackgroundTransferService 개체의 Requests 속성을 사용하여 응용프로그램에 대한 모든 백그라운드 전송을 반복합니다.

    • 각 요청에 대해 TransferStatusChanged 이벤트의 처리기를 등록하여 응용프로그램이 실행하는 동안 발생하는 상태 변화에 응답할 수 있도록 합니다.

    • 각 요청에 대해 TransferProgressChanged 이벤트의 처리기를 등록합니다. 이 작업은 활성 상태의 전송 진행 상황을 사용자에게 알리는 데 유용합니다.

    • 각 요청에 대해 TransferStatus 속성을 검토하여 응용프로그램이 비활성 상태일 때 전송이 완료되었는지 또는 상태가 변경되었는지를 확인합니다.

    • 타이머나 다른 메커니즘을 사용하여 서비스의 변경 내용을 폴링하는 대신, 앞서 설명한 콜백을 사용하여 응용프로그램 UI를 업데이트합니다.

  • 새 전송 요청을 추가하는 경우

    • BackgroundTransferService 개체의 Add(BackgroundTransferRequest) 메서드를 사용합니다.

    • 먼저 응용프로그램이 응용프로그램별로 적용되는 25개의 동시 전송 횟수 제한에 도달했는지를 확인합니다. 이러한 경우 기존 전송이 완료되기를 기다릴 것인지, 또는 기존 전송을 취소할 것인지 묻는 메시지를 표시해 사용자에게 알릴 수 있습니다. 또한 격리된 저장소에 새로운 전송 정보를 저장한 다음 이 정보를 로드하고, 나중에 파일 전송 큐가 이러한 제한 횟수 아래로 떨어지면 전송을 시작할 수도 있습니다.

    • try 블록의 Add 호출을 배치하고 catch 예외를 처리합니다. 새 전송을 만들려고 했지만 실패한 경우 사용자에게 도움이 되는 메시지를 제공해야 합니다.

    • 모든 전송 작업에 대한 로컬 디렉터리 루트로 “/shared/transfers”를 사용합니다. 파일 다운로드 시 DownloadLocation 속성을 이 디렉터리에 있는 파일 이름으로 설정합니다. 전송이 완료되면 파일이 이 위치에 저장됩니다. 파일 업로드 시 UploadLocation 속성을 이 디렉터리에 있는 파일 이름으로 설정하여 업로드할 파일을 지정합니다.

    • RequestUri 속성을 사용하여 파일 전송에 대한 원격 서버 주소를 지정합니다. 백그라운드 전송 서비스는 UriOriginalString 속성을 사용합니다. 이러한 이유로 Uri가 아직 이스케이프되지 않은 경우 Uri.EscapeUriString 메서드를 사용해 Uri의 특수 문자를 이스케이프해야 합니다.

    • 전송할 파일이 100MB보다 크면 전송의 TransferPreferences 속성을 None으로 설정합니다. 그렇지 않으면 시스템이 자동으로 전송 설정을 이 값으로 변경합니다. 이는 곧 휴대폰이 외부 전원에 연결되고 Wi-Fi 연결이 설정되어 있을 때에만 전송된다는 뜻입니다.

  • 전송이 완료된 경우

    • TransferStatus 속성 값은 Completed가 됩니다.

    • 대상 서버에서 반환된 HTTP 상태 코드를 포함하는 StatusCode 속성을 검사하여 전송에 성공했는지 확인합니다. 전송에 성공하면 서버 구성에 따라 이 값은 200 또는 206이 됩니다. 두 값을 모두 검사하는 것이 좋습니다. 다른 모든 상태 코드는 서버 오류를 나타냅니다. 서버 오류를 처리하는 방법은 응용프로그램에 따라 다릅니다.

    • TransferError 속성을 검사하여 전송에 실패한 이유를 확인합니다.

    • 파일 다운로드에 성공하면 파일을 “/shared/transfers” 디렉터리에서 격리된 저장소의 새 위치로 이동하여 이후 백그라운드 전송 작업에 노출되지 않도록 할 수 있습니다.

    • BackgroundTransferServiceRemove(BackgroundTransferRequest) 메서드를 호출하여 큐에서 전송 요청을 제거합니다. 응용프로그램은 보류 중인 요청, 활성 상태의 요청 및 완료된 요청 등의 동시 전송 요청 수가 25개로 제한됩니다. 시스템은 완료된 전송을 자동으로 제거하지는 않습니다. 이전 전송을 제거하지 못하고 응용프로그램 제한을 초과한 경우에 새 전송을 추가하려고 하면 예외가 발생합니다.

백그라운드 파일 전송 기능을 사용하는 응용프로그램은 다음의 사용자 인터페이스 요소를 구현해야 합니다.

  • 백그라운드 파일 전송 기능은 버튼을 탭하는 등의 작업을 통해 사용자가 시작해야 합니다. 사용자가 전송을 시작하지 않으면 사용자 대신 응용프로그램에서 전송을 시작할 것임을 사용자에게 알려야 합니다.

  • 사용자가 상태를 확인하고 모든 백그라운드 전송의 진행 상황을 전송할 수 있는 UI를 제공해야 합니다.

  • 또한 사용자가 현재 진행되는 전송의 일부 또는 전부를 취소할 수 있는 메커니즘을 제공해야 합니다.

  • 외부 전원에 연결되어 있고 Wi-Fi를 통해 연결할 수 있는 경우에만 파일이 전송되도록 제한하는 기본 전송 설정을 사용합니다. 사용자에게 외부 전원 없이 셀룰러 연결을 통해 전송하도록 선택할 수 있는 UI를 제공합니다. 사용자의 선택은 TransferPreferences 속성을 사용하여 설정할 수 있습니다.

  • 백그라운드 전송의 상태가 WaitingForExternalPower, WaitingForExternalPowerDueToBatterySaverMode, WaitingForWiFi 또는 WaitingForNonVoiceBlockingNetwork인 경우 전송이 대기 중인 이유를 알리고, 해당하는 경우 전송을 계속하기 위해 사용할 수 있는 작업 단계(예: Wi-Fi- 네트워크에 연결)를 알려주는 메시지를 표시합니다.

백그라운드 전송 기능을 사용하는 응용프로그램은 다음 권장 지침을 따라야 합니다.

  • 연결된 전송 작업이 완료될 때까지 “/shared/transfers” 디렉터리의 대상 파일에 액세스하거나 이 파일을 수정하지 않도록 합니다.

  • BackgroundTransferRequest 개체의 Tag 속성을 사용하여 전송과 관련된 사용자 지정 데이터를 연결할 수 있습니다. 응용프로그램은 전송 요청이 만들어지면 값을 설정할 수 있습니다. Requests 속성이나 Find(String) 메서드를 사용하여 전송 요청이 검색되면 이전에 설정한 데이터가 Tag 속성에 포함됩니다. 이 속성의 최대 길이는 4000자이지만 데이터 크기를 더 작게 유지하여 성능을 향상시키는 것이 좋습니다.

  • Requests 속성에 액세스하면 BackgroundTransferRequest의 새 인스턴스가 만들어집니다. 메모리 누수를 방지하려면 요청 수를 쿼리하기 위해 이 속성에 자주 액세스(예: 게임 루프)하지 않는 것이 좋습니다. 또한 반환된 개체는 더 이상 사용하지 않을 경우 신속하게 삭제하는 것이 좋습니다. 동일한 권장 사항이 제공된 전송 ID가 발견될 때마다 새 인스턴스를 만드는 Find(String) 메서드에 적용됩니다.

  • TransferStatusChangedTransferProgressChanged 이벤트에 대한 이벤트 처리기는 사용자 인터페이스가 느려지지 않도록 빠르게 반환해야 합니다. 격리된 저장소에 대한 읽기 및 쓰기 작업은 속도가 느려질 수 있으므로 가능한 경우 별도의 작업자 스레드로 수행하는 것이 좋습니다.

  • TotalBytesToReceive 속성은 파일 다운로드의 전체 크기를 나타냅니다. 이 값이 -1이면 파일 크기를 알 수 없습니다.

  • 서버는 HTTP 응답 머리글의 Content-length를 반환하도록 구성해 사용자가 전송 규모와 진행 상태를 알 수 있어야 합니다.

  • 서버는 클라이언트의 범위 요청을 지원해 성능 향상시켜야 합니다. 진행 중에 백그라운드 전송이 일시 중지되었다가 계속될 수 있습니다. 범위 요청을 지원하지 않으면 전송이 일시 중지될 때마다 다시 시작해야 하므로 성능이 저하됩니다.

  • 브라우저에서 또는 백그라운드 전송 응용프로그램 외부의 다른 메커니즘을 통해 서버 측 기능을 테스트하여 제대로 작동하는지 확인하는 것이 좋습니다.

표시: