2011-02-01 16 views

Trả lời

3

Từ táo documentation.

Cho đại biểu biết rằng ứng dụng hiện đang ở chế độ nền.

- (void)applicationDidEnterBackground:(UIApplication *)application 

thông số ứng dụng Các ví dụ ứng dụng singleton.

Thảo luận Trong iOS 4.0 trở lên, phương thức này được gọi thay vì phương thức applicationWillTerminate: khi người dùng thoát ứng dụng hỗ trợ thực thi nền. Bạn nên sử dụng phương thức này để giải phóng tài nguyên được chia sẻ, lưu dữ liệu người dùng, bộ đếm thời gian không hợp lệ và lưu trữ đủ thông tin trạng thái ứng dụng để khôi phục ứng dụng của bạn về trạng thái hiện tại trong trường hợp nó bị chấm dứt sau này. Bạn cũng nên tắt cập nhật cho giao diện người dùng của ứng dụng và tránh sử dụng một số loại tài nguyên hệ thống được chia sẻ (chẳng hạn như cơ sở dữ liệu danh bạ của người dùng). Nó cũng là bắt buộc mà bạn tránh sử dụng OpenGL ES trong nền.

Việc triển khai phương pháp này của bạn có khoảng năm giây để thực hiện mọi tác vụ và trả lại. Nếu bạn cần thêm thời gian để thực hiện bất kỳ tác vụ cuối cùng nào, bạn có thể yêu cầu thêm thời gian thực hiện từ hệ thống bằng cách gọi beginBackgroundTaskWithExpirationHandler:. Trong thực tế, bạn nên trở về từ applicationDidEnterBackground: càng nhanh càng tốt. Nếu phương thức không trả lại trước khi hết thời gian, ứng dụng của bạn bị chấm dứt và bị xóa khỏi bộ nhớ.

Bạn nên thực hiện bất kỳ tác vụ nào liên quan đến việc điều chỉnh giao diện người dùng của bạn trước khi phương thức này thoát nhưng các tác vụ khác (chẳng hạn như trạng thái lưu) sẽ được chuyển đến hàng đợi công văn đồng thời hoặc chuỗi phụ nếu cần. Vì có thể bất kỳ tác vụ nền nào bạn bắt đầu trong applicationDidEnterBackground: sẽ không chạy cho đến sau khi thoát khỏi phương thức đó, bạn nên yêu cầu thêm thời gian thực hiện nền trước khi bắt đầu các tác vụ đó. Nói cách khác, trước tiên hãy gọi beginBackgroundTaskWithExpirationHandler: và sau đó chạy tác vụ trên hàng đợi công văn hoặc chuỗi phụ.

Ứng dụng này cũng đăng thông báo UIApplicationDidEnterBackgroundNotification cùng một lúc gọi phương thức này để cung cấp cho các đối tượng quan tâm một cơ hội để phản hồi chuyển tiếp.

25

Thông báo này có nghĩa là người dùng "thoát" ứng dụng của bạn trên iPhone 4 - Điều này xảy ra khi cuộc gọi điện thoại hoặc tin nhắn văn bản đến và người dùng chấp nhận gián đoạn (câu trả lời/trả lời) hoặc khi người dùng nhấn nút Trang chủ .

tôi tìm thấy liên kết này trên SO cho thấy sự tương tác giữa tất cả các nước, và các thông báo thích hợp: http://www.drobnik.com/touch/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/

Để tận dụng được thông báo này bạn có thể thực hiện applicationDidEnterBackground như @Antwan đề xuất (trong lớp UIApplicationDelegate của bạn - đó là lớp chính).

Hoặc bạn có thể thiết lập một handler thông báo bất cứ nơi nào bạn muốn/nhu cầu trong mã của bạn:

[[NSNotificationCenter defaultCenter] addObserver: self 
             selector: @selector(handleEnteredBackground:) 
              name: UIApplicationDidEnterBackgroundNotification 
              object: nil]; 

Chúc may mắn!

Oded.

+0

Làm rõ nhỏ, 'UIApplicationDidEnterBackgroundNotification' là _not_ được gọi khi có cuộc gọi điện thoại đến.' UIApplicationWillResignActiveNotification' sẽ, mặc dù. Nếu bạn trả lời cuộc gọi, chỉ sau đó sẽ 'UIApplicationDidEnterBackgroundNotification' được đăng. – Rob