2017-01-05 17 views
6

Ứng dụng của tôi hỗ trợ cập nhật vị trí nền (cụ thể với theo dõi vị trí quan trọng).Tôi có nên tránh giao diện người dùng khi ứng dụng iOS được khởi chạy ở chế độ nền

Tôi có cần phải ngăn chặn giao diện người dùng (thông qua bộ điều khiển vv) không khi tải xuống khi tôi xác định ứng dụng ở chế độ nền (application.applicationState == UIApplicationStateBackground)?

Mục đích của tôi là tránh tải giao diện người dùng nặng (đó là ứng dụng LỚN) ở chế độ nền, có thể lãng phí tất cả thời gian giới hạn mà tôi có trong nền để thực sự phản hồi cập nhật vị trí.

Ví dụ (trong ObjC, nhưng câu hỏi cũng là dành cho Swift), giả sử tôi có một số RootViewController mà khởi và nắm giữ toàn bộ controllers/hệ thống phân cấp xem, tôi nên, trong viewDidLoad làm:

if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) { 
    // Root view controller loaded while in background, so doing only background stuff 
    [self justDoBackgroundStuffWithoutUI]; 
} else { 
    // Root view controller loaded normally, so loading normal UI 
    [self initializeUIAndChildControllers]; 
} 

? Hoặc tôi chỉ nên "tin tưởng" iOS để bỏ qua tất cả các nhiệm vụ giao diện người dùng, bởi vì nó sẽ biết nó ở trạng thái nền?

+2

Bạn chỉ có thể tin tưởng iOS để xử lý việc này, nó sẽ không hiển thị giao diện người dùng ở trạng thái nền, điều đó được tích hợp vào hệ điều hành. Khung công tác UIKit cơ bản sẽ quyết định xem ứng dụng có cần thực sự hiển thị hay không. Ghi nhớ rằng các sự kiện của vòng đời ứng dụng cho các bộ điều khiển xem chủ yếu là để đáp ứng với tương tác của người dùng, một khi viewDidLoad và viewDidAppear đã chạy phần còn lại chỉ thực sự chạy khi người dùng thực hiện điều gì đó, mà họ sẽ không ở trong khi ứng dụng không ở tiền cảnh – Scriptable

+0

suy nghĩ sau đó là những gì nếu bộ điều khiển của tôi cũng ví dụ tải về nhiều hình ảnh tự động trên 'viewDidLoad' của họ - đó là, tôi đoán, sẽ không bị bỏ qua bởi các os. Có lẽ 'UIImageView'a sẽ không được hiển thị, nhưng dữ liệu và' UIImage 'sẽ thực sự được tải. – mllm

+0

Trong trường hợp đó yêu cầu mạng 'nên' vẫn hoàn thành, nhưng khi một applciation được nền bất kỳ nhiệm vụ còn lại chỉ có một số lượng hạn chế thời gian để hoàn thành những gì họ đang làm trước khi bị đình chỉ/chấm dứt. nó sẽ không chỉ tiếp tục chạy không chính xác. – Scriptable

Trả lời

4

Bạn có thể bỏ qua chúng và để hệ điều hành xử lý, chỉ cần cẩn thận nếu bạn có nhiệm vụ BG dài, chúng có thể hoặc không có thời gian để hoàn thành vì vậy tốt nhất là rất cẩn thận vì nó sẽ không cho phép bạn chạy nhiệm vụ mãi mãi.

1

Cập nhật giao diện người dùng ở chế độ nền là không cần thiết và gây nhầm lẫn và không hiệu quả.

  • không cần thiết vì không có giá trị gia tăng cho người dùng không sử dụng ứng dụng. Việc làm đơn giản của mọi thứ trong viewWillAppear là đủ.
  • gây nhầm lẫn vì người dùng có thể hy vọng sẽ thấy thay đổi khi màn hình xuất hiện, tôi không biết ứng dụng của bạn, nhưng đây là lựa chọn kinh doanh nhiều hơn. Có thể bạn có điều gì đó tương tự theo cách hiển thị các thay đổi như gmail/whatsapp và bạn muốn người dùng xem các email/tin nhắn mới mới.
  • không hiệu quả vì bạn chỉ đang sử dụng pin tiêu thụ quá sớm. Bạn thậm chí còn nói "tải UI nặng". Điều gì sẽ xảy ra nếu vị trí thay đổi một lần nữa và một lần nữa và một lần nữa? những thay đổi có thể được ghi đè theo nghĩa là chúng không còn cần thiết nữa hoặc bạn sẽ luôn cần những thay đổi bất kể.

Để tóm tắt: Tôi không nói không cập nhật giao diện người dùng, mọi ứng dụng đều có điểm nhạy cảm. Có khả năng bạn sẽ không cần phải làm hầu hết trong số họ và lười biếng tải các thay đổi tức là khi tải màn hình có vẻ là cách tốt hơn. Mặc dù tôi chắc chắn có một số hướng dẫn nâng cao mà tôi không biết. Hy vọng rằng câu trả lời khác sẽ đến.

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