'Swift' uygulamasında, Amazon S3
kovuğuma fotoğraf yükleme özelliğim var. Kullanıcı WiFi
veya LTE
'a bağlandığında, sorun yoktur, ancak bağlantı biraz daha yavaş olduğunda (örn. 3G
), yükleme çok fazla zaman alır (bir dakikaya kadar) ve iphone 15-20% kaybedebilir pil! Fotoğrafları 200-300kb'ye düşürüyorum, bu yüzden sorun olmamalı. Bunun için kullandığınız koddur: bu büyük pil tüketimi önlenebilir senin burada yanlış yapıyorum ne zihin ve nasıl çıkageldi şeySwift uygulamamdaki verileri Amazon S3'e yüklüyorum ve pili başka hiçbir şey gibi boşaltıyor. Bu nasıl önlenebilir?
func awsS3PhotoUploader(_ ext: String, pathToFile: String, contentType: String, automaticUpload: Bool){
let credentialsProvider = AWSCognitoCredentialsProvider(regionType:CognitoRegionType,
identityPoolId:CognitoIdentityPoolId)
let configuration = AWSServiceConfiguration(region:CognitoRegionType, credentialsProvider:credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
let uploadRequest = AWSS3TransferManagerUploadRequest()
uploadRequest?.body = URL(string: "file://"+pathToFile)
uploadRequest?.key = ProcessInfo.processInfo.globallyUniqueString + "." + ext
uploadRequest?.bucket = S3BucketName
uploadRequest?.contentType = contentType + ext
uploadRequest?.uploadProgress = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) -> Void in
DispatchQueue.main.async(execute: {() -> Void in
if totalBytesExpectedToSend > 1 {
print(totalBytesSent)
print(totalBytesExpectedToSend)
}
})
}
let transferManager = AWSS3TransferManager.default()
transferManager?.upload(uploadRequest).continue({ (task) -> AnyObject! in
if (task.isCompleted) {
print("task completed")
}
if let error = task.error {
print("Upload failed ❌ (\(error))")
}
if let exception = task.exception {
print("Upload failed ❌ (\(exception))")
}
if task.result != nil {
let s3URL: String = "https://myAlias.cloudfront.net/\((uploadRequest?.key!)!)"
print("Uploaded to:\n\(s3URL)")
}
else {
print("Unexpected empty result.")
}
return nil
}
)
}
var mı?
. UploadProgress geri aramanız ne sıklıkla çağrılır? Daha yavaş yüklemeler için daha sık olacak sanırım. Bu nedenle, DispatchQueue.main üzerinde çok sayıda çağrı planlıyor olabilirsiniz. Hangi kaynakları alabiliyor ve bu da ilerlemeyi yavaşlatıyor, bu da konuyu daha da kötüleştiriyor. Aslında, bizim app çok meşgul olduğu yeniden-çizim olarak birkaç kez önce bir "güzel ve fantezi" bir ilerleme animasyon, sadece birkaç kez ağ hızı damla görmek için eklediğimiz gibi (farklı ama benzer bir senaryoda) gibi bir sorun gördüm ilerleme ve gerçek ağ için zaman yoktu :-). – Seva
Uygulamanızın cihazlarda Zaman Profiler'i kullanarak çoğu CPU'yu nerede harcadığını gerçekten tahmin edebileceğinizden daha kolay. Nasıl yapılacağını açıklayan bir [WWDC videosu] (https://developer.apple.com/videos/play/wwdc2016/418/) var. –