2016-11-06 36 views
5

Tôi đang tạo một ứng dụng cho trường học của mình nên kiểm tra cứ sau n phút nếu có dấu mới trên trang web. Để thực hiện việc này khi người dùng đăng nhập lần đầu tiên, số lượng dấu thực tế được lưu trong "UserDefaults". Khi ứng dụng bị chấm dứt, sau n phút, số lượng dấu được tính lại và so sánh với số trước đó và gửi thông báo trong trường hợp số bị thay đổi.Thực hiện các tác vụ nền khi ứng dụng bị chấm dứt

Điều tôi muốn biết nếu có cách nào để thực hiện tác vụ này. Tôi đã cố gắng tạo một bộ đếm thời gian trong ứng dụngWillTerminate- nhưng nó chỉ được kích hoạt một lần. Đây là những gì tôi đã thử:

func applicationWillTerminate(_ application: UIApplication) { 
    DispatchQueue.main.async { 
     self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(AppDelegate.findMark), userInfo: nil, repeats: true) 
     self.timer.fire() 
    } 
} 

Công cụ chọnMark là nhiệm vụ.

Cảm ơn trước!

+0

Không thể thực hiện khi ứng dụng bị chấm dứt. Vui lòng kiểm tra câu trả lời của tôi. Hãy tự hỏi bất kỳ nghi ngờ nào :) – KrishnaCA

+0

Bạn có dự định chạy ứng dụng trong thời gian vô hạn dưới nền hay chỉ khi ứng dụng bị chấm dứt? –

+0

Điều tôi đã hiểu là bạn muốn chạy nó trong thời gian vô hạn trong nền và bất cứ khi nào bộ đếm được cập nhật cho số lượng nhãn hiệu, bạn muốn gửi thông báo, đó là những gì bạn định làm? –

Trả lời

9

Bạn có hai lựa chọn

  1. ứng dụng chạy nền Refresh
  2. Im lặng thông báo đẩy

dễ nhất ai là ứng dụng chạy nền Refresh. Bởi vì sau này người ta cần một máy chủ để gửi thông báo. Bạn có thể kiểm tra sau API để sử dụng. Về cơ bản, bạn đặt Tìm nạp nền khả năng trên Chế độ khả năng/chế độ nền của ứng dụng của bạn. Thỉnh thoảng, iOS sẽ đánh thức ứng dụng của bạn và gọi số application(_:performFetchWithCompletionHandler:) đại biểu.Bạn sẽ có khoảng 30-45 giây để gọi hàm của bạn và xử lý cuộc gọi hoàn thành. Nếu bạn không hoàn thành đúng thời gian, iOS sẽ giết ứng dụng của bạn. Nếu bạn không tuân thủ các quy tắc, iOS sẽ cho bạn ít cơ hội thức dậy hơn. Để sử dụng chi tiết hơn Chế độ nền, bạn có thể kiểm tra sau tutorial

+0

Tôi đã đọc ứng dụng đó (_: performFetchWithCompletionHandler :) không thực hiện tác vụ mỗi n phút .. đúng không? –

+0

Có. iOS lên lịch cuộc gọi này và bạn không có cách nào để biết khi nào cuộc gọi sẽ được gọi. Tuy nhiên, càng có nhiều ứng dụng được sử dụng thì càng nhiều iOS sẽ gọi trình xử lý này. Không có thông báo đẩy, không có cách nào đáng tin cậy để đánh thức ứng dụng sau n phút. – Meanteacher

+0

Theo câu hỏi, câu trả lời này không được chấp nhận. – RamGrg

3

Không thể thực hiện các tác vụ như được mô tả trong câu hỏi của bạn sau khi ứng dụng bị chấm dứt. Như đã trình bày trong tài liệu:

App Chấm dứt

Apps phải được chuẩn bị cho việc chấm dứt để xảy ra bất cứ lúc nào và không nên chờ đợi để lưu dữ liệu người dùng hoặc thực hiện các nhiệm vụ quan trọng khác. Kết thúc do hệ thống thực hiện là một phần bình thường trong vòng đời của ứng dụng. Hệ thống thường chấm dứt các ứng dụng để nó có thể lấy lại bộ nhớ và nhường chỗ cho các ứng dụng khác được người dùng khởi chạy nhưng hệ thống cũng có thể chấm dứt các ứng dụng hoạt động không đúng hoặc không phản hồi kịp thời các sự kiện.

Ứng dụng bị treo sẽ không nhận được thông báo khi chúng bị chấm dứt; hệ thống giết chết quá trình và thu hồi bộ nhớ tương ứng. Nếu ứng dụng hiện đang chạy dưới nền và không bị tạm ngưng, hệ thống sẽ gọi ứng dụngWillTerminate: của ứng dụng được ủy quyền trước khi chấm dứt. Hệ thống không gọi phương thức này khi thiết bị khởi động lại.

Ngoài hệ thống chấm dứt ứng dụng của bạn, người dùng có thể chấm dứt ứng dụng của bạn một cách rõ ràng bằng giao diện người dùng đa nhiệm. Kết thúc do người dùng thực hiện có cùng tác dụng như chấm dứt một ứng dụng bị tạm ngưng. Quy trình của ứng dụng bị giết và không có thông báo nào được gửi tới ứng dụng.

Link: https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html

Edit:

Bạn không thể thực hiện bất kỳ công việc sau khi đơn được chấm dứt. Những gì bạn có thể làm là thực hiện tính toán đó từ phía máy chủ và gửi Push Notification đến thiết bị.

+0

Cảm ơn và tôi nên làm gì? Vì có rất nhiều trò chơi ngoại tuyến gửi thông báo khi, ví dụ: một tòa nhà bị chấm dứt .. và appen này ngay cả khi ứng dụng được đóng bằng tay với trình quản lý đa nhiệm .. –

+0

Đó là Thông báo đẩy hoặc Thông báo địa phương. Nếu đó là những gì là cần thiết, sau đó tôi sẽ thêm rằng trong câu trả lời. Đợi .. – KrishnaCA

+0

vâng, đó là những gì tôi đang đề cập đến .. nhưng khi ứng dụng bị đóng, tác vụ gửi LocalNotification chỉ được gọi một lần –

Các vấn đề liên quan