2010-11-08 4 views
8

Chuyên gia về Hallo,Chỉ ứng dụngWillResignActive được gọi khi iPhone tắt?

Tôi đã thử nghiệm điều gì đang xảy ra với ứng dụng của mình khi iPhone bị tắt trong khi ứng dụng đang hoạt động. Vì mục đích này, tôi đã ghi lại các phương thức gọi lại của vòng đời của ứng dụng trong bảng điều khiển trình gỡ lỗi xcode.

Kết quả là: Khi tôi nhấn nút bật/tắt của thiết bị trong một khoảng thời gian applicationWillResignActive được gọi. IPhone hiển thị tùy chọn tắt thiết bị trên màn hình. Nếu tôi xác nhận sẽ tắt, iPhone sẽ tắt. Nhưng một cách rõ ràng không có phương thức gọi lại nào khác như applicationDidEnterBackground hoặc applicationWillTerminate được gọi là. Do đó, tất cả dữ liệu sẽ bị mất nếu tôi không lưu dữ liệu trong applicationWillResignActive. Mặc dù iOS Application Programming Guide cho biết, bạn nên lưu dữ liệu của ứng dụng trong applicationDidEnterBackgroundapplicationWillTerminate.

Bạn nghĩ gì, là một trong hai phương pháp vẫn được gọi và chỉ không được in trong bảng điều khiển nữa?

Trân trọng

+0

Quan sát thú vị. Có vẻ như nó có thể được gọi bởi giao diện điều khiển bị ngắt kết nối bởi sau đó, nhưng tôi đặt cược nó thậm chí không bao giờ được gọi. Linh cảm của tôi là các ứng dụng iOS được xử lý như chấm dứt đột ngột của OSX nên quá trình này bị giết mà không có thông báo. Nhưng sau đó một lần nữa tôi đặt cược người dùng rất hiếm khi tắt thiết bị của họ (nếu họ thậm chí biết làm thế nào). –

+0

Nhưng thiết bị cũng tắt nếu pin cạn. Thật khó để kiểm tra hành vi của một ứng dụng trong trường hợp có một người đánh nhau. Bởi vì nếu bạn kết nối iPhone của bạn với máy tính phát triển để đăng nhập các phương thức gọi lại trong bảng điều khiển, nó sẽ bị tính phí! Nhưng tôi đoán ứng dụng hoạt động tương tự như tắt thủ công. – Coco

+1

Tôi đã thử nghiệm trên 3GS chạy iOS 5.0 ... nếu tắt công tắc, applicationDidEnterBackground cũng như applicationWillTerminate được gọi! Thiết bị đã đăng nhập vào bảng điều khiển trước khi tắt. – Dev

Trả lời

1

Tôi nghĩ rằng thử nghiệm của bạn có thể đúng. Các ứng dụng không còn hoạt động nhưng nó đã không đi vào nền - loại như khi tôi gọi đến - vì vậy tôi nghĩ rằng các thông báo có ý nghĩa.

Bạn nên làm gì với ứng dụng này? Đề nghị của tôi sẽ không là gì cả. Dường như với tôi rằng sự kiện này xảy ra thường xuyên đến mức không đáng lo ngại. Nếu bạn muốn đi dây đai và niềng răng thì việc lưu trạng thái trong ‘applicationWillResignActive‘ sẽ hoạt động miễn là không có nhiều thứ để lưu trữ.

3

Tôi đã thực hiện thêm một số kiểm tra:

Tôi đã lưu các phương thức vòng đời được gọi trong cơ sở dữ liệu và tắt iPhone trong khi ứng dụng có thể đang chạy. Thực ra chỉ có applicationWillResignActive được gọi. Nhưng sau khi tắt ứng dụng của tôi nằm trong trạng thái "không chạy", bởi vì khởi chạy nó khởi tạo các cuộc gọi application:didFinsihLaunchingWithOptions:applicationDidBecomeActive. Vì vậy, dữ liệu ứng dụng bị mất nếu tôi không lưu nó trong applicationWillResignActive.

Nếu pin trống trong khi một ứng dụng đang chạy applicationDidEnterBackgroundapplicationWillTerminate được gọi là (không tiếng gọi của applicationWillResignActive!).

0

Tôi đã thử nghiệm điều này. Đây là thứ tự các phương thức được gọi.

  1. applicationWillResignActive - Khi người dùng lâu giữ nút khóa trên thiết bị (và một thanh trượt được trình bày yêu cầu người dùng "Slide to power off"

Nếu bạn trượt, thiết bị sẽ gọi sau hai phương pháp trong ứng dụng của bạn theo thứ tự dưới đây

  1. applicationDidEnterBackground

  2. applciationWillTerminate

Thiết bị sẽ tắt.

Tôi giả định tương tự xảy ra khi pin cạn kiệt.

Điều này đã được thử nghiệm trên 3G đang chạy iOS 5.0

Hy vọng điều này sẽ hữu ích.