Tôi đang sử dụng Alamofire để thực hiện cuộc gọi đến một dịch vụ web mất một thời gian khá dài để tải. Nếu ứng dụng chạy ngầm, tôi gặp khó khăn với trình tải của tôi khi tôi quay lại ứng dụng. Tôi tưởng tượng đó là bởi vì cuộc gọi không bao giờ trả lại bất cứ điều gì để xử lý hoàn thành của tôi. Làm thế nào tôi có thể giải quyết vấn đề này?Yêu cầu Alamofire bị kẹt khi nhập vào nền?
Trả lời
Bạn có thể sử dụng tính năng tìm nạp nền để giải quyết vấn đề này. Nó có thể được thực hiện theo cách sau trong Swift 3:
var backgroundTask: UIBackgroundTaskIdentifier? // global variable
backgroundTask = UIApplication.shared.beginBackgroundTask(withName: "backgroundTask") {
// Cleanup code should be written here so that you won't see the loader
UIApplication.shared.endBackgroundTask(self.backgroundTask!)
self.backgroundTask = UIBackgroundTaskInvalid
}
Gọi cho dịch vụ alamofire của bạn sau dòng này. Trong trình xử lý hoàn thành, kết thúc tác vụ bằng các dòng dưới đây.
UIApplication.shared.endBackgroundTask(self.backgroundTask!)
self.backgroundTask = UIBackgroundTaskInvalid
Xin lưu ý rằng ứng dụng có thời gian nền (backgroundTimeRemaining
thuộc tính) còn lại trước khi chuyển sang trạng thái không hoạt động. Bạn phải hoàn thành nhiệm vụ trước thời gian đó. Trình xử lý được gọi ngay trước khi thời gian nền còn lại đạt đến 0. Ngoài ra, mỗi cuộc gọi đến phương thức beginBackgroundTask(withName:){}
phải được cân bằng bởi một cuộc gọi phù hợp với phương thức endBackgroundTask:
.
Để tạo mã được cung cấp ở trên cơ quan, bạn cần điều chỉnh cài đặt trong ứng dụng của mình. Tới "Mục tiêu" và bấm vào "khả năng" để làm những điều sau đây thay đổi
Sau đó, đi đến file info.plist của bạn, và mở nó như là nguồn để thêm đoạn mã sau.
Tôi hy vọng điều này sẽ giúp bạn. Nếu bạn cần thông tin chi tiết hơn, những liên kết có thể giúp
- 1. Yêu cầu nền không thực thi Alamofire Swift
- 2. Yêu cầu bị kẹt trong ActiveRecord :: QueryCache middleware
- 3. NSURLSự yêu cầu đồng thời với Alamofire
- 4. In nội dung yêu cầu của Alamofire
- 5. nhanh chóng, alamofire hủy yêu cầu trước
- 6. Vi trên freeBSD: bị kẹt vào "chế độ nhập cũ"
- 7. Yêu cầu, nhập, yêu cầu nhập
- 8. Yêu cầu bị kẹt trong RequestAcquireState trong quy trình công nhân IIS
- 9. DrawerLayout bị kẹt khi vuốt
- 10. Yêu cầu POST của Alamofire với tiến trình
- 11. Nhận dữ liệu hình ảnh với yêu cầu Alamofire
- 12. nodetool removenode bị kẹt trong khi xóa
- 13. Nhiều loại mã hóa cho Alamofire Yêu cầu
- 14. Nhà cửa Laravel bị kẹt trên đăng nhập VM
- 15. Jenkins- Bị kẹt khi cài đặt trang plugin ban đầu
- 16. jQuery thêm yêu cầu vào các trường nhập
- 17. Yêu cầu Đã hết thời gian khi cố gắng thêm thiết bị iOS vào cổng
- 18. Yêu cầu HTTP iOS trong khi ở chế độ nền
- 19. Sitecore - Yêu cầu đăng nhập
- 20. Alamofire tải PNG lên Flask với nền trắng
- 21. Yêu cầu Alamofire luôn thất bại với "Yêu cầu hết thời gian" nếu Socket.io được kết nối
- 22. Sbt 0.12.4+ yêu cầu khi nhập dự án
- 23. SSO yêu cầu nhiều lần đăng nhập
- 24. Trình duyệt nhập/yêu cầu?
- 25. Manager với Swift 2.0 Alamofire bị hủy
- 26. Swift Alamofire thêm tiêu đề tùy chỉnh cho tất cả các yêu cầu
- 27. Lặp lại yêu cầu AJAX sau khi đăng nhập
- 28. Yêu cầu Python không thể đăng nhập
- 29. Tải lên tệp nhanh Alamofire với yêu cầu đã ký: cách gửi tiêu đề ủy quyền?
- 30. Android MediaPlayer bị kẹt trong chuẩn bị()
http://stackoverflow.com/questions/34328678/web-service-call-in-background-mode -ios – Sofeda
http://redth.codes/ios7-recipe-background-fetching/ – Sofeda
chúng có thể giúp bạn – Sofeda