2010-03-28 28 views
26

Làm cách nào để kiểm tra tất cả các mã phương pháp sau? Tôi muốn phát kịch bản khi tất cả chúng đang xảy ra để xem liệu mã của tôi có hoạt động cho quá trình lưu/khôi phục hoạt động hay không. Vì vậy, tôi nên làm gì trong Trình mô phỏng để có được tất cả các phương pháp được thử nghiệm?Làm cách nào để kiểm tra mã được tạo để lưu/khôi phục Vòng đời của một Hoạt động?

public class Activity extends ApplicationContext { 
    protected void onCreate(Bundle savedInstanceState); 

    protected void onStart(); 

    protected void onRestoreInstanceState(Bundle savedInstanceState); 

    protected void onSaveInstanceState(Bundle savedInstanceState); 

    protected void onRestart(); 

    protected void onResume(); 

    protected void onPause(); 

    protected void onStop(); 

    protected void onDestroy(); 
} 

Trả lời

6

onCreate, onStartonResume sẽ chạy khi bạn khởi động ứng dụng của bạn, không có tương tác hơn nữa cần thiết. , onStoponDestroy sẽ chạy khi bạn thoát, ví dụ: bằng cách nhấn nút Quay lại nhiều lần.

Để kiểm tra onRestart, onSaveInstanceStateonRestoreInstanceState, sau khi khởi chạy ứng dụng của bạn, hãy thử nhấn nút Trang chủ, khởi chạy một số ứng dụng khác để đảm bảo Hoạt động của bạn sẽ bị giết.

Sử dụng ghi nhật ký để kiểm tra xem các phương pháp đã được gọi hay chưa.

(Hoạt động vòng đời tài liệu: http://developer.android.com/guide/topics/fundamentals.html#actlife)

+0

Tôi thường chờ hệ thống Android giết quá trình, tôi sử dụng hệ thống> ứng dụng> chọn ứng dụng> tùy chọn dừng lực, nhưng đó là tôi – Pyrodante

+6

@Pyrodante Bạn không thể kiểm tra phục hồi trạng thái nếu bạn giết quá trình.Giết quá trình xóa bộ nhớ ứng dụng nghĩa là các trạng thái bị mất. Khi bạn mở ứng dụng, bạn sẽ thấy màn hình đầu tiên của mình thay vì nơi bạn rời đi. – Pijusn

+8

"Khởi chạy một loạt các thứ khác và quay lại" không phải là chiến lược thử nghiệm. –

7

Để kiểm tra onSaveInstanceState và onRestoreInstanceState bạn có thể sử dụng một trong hai công cụ SetAlwaysFinish (xem link bên dưới) hoặc DevTools ứng dụng kèm với giả lập.

http://bricolsoftconsulting.com/how-to-test-onsaveinstancestate-and-onrestoreinstancestate-on-a-real-device/

Cả hai ứng dụng sử dụng cài đặt ẩn có tên AlwaysFinish mà là một phần của lớp ActivityManagerNative để thay đổi hành vi của hệ điều hành Android. Theo hành vi mới, hệ điều hành sẽ dỡ bỏ bất kỳ hoạt động nào ngay khi nó rời khỏi màn hình, kích hoạt sự kiện onSaveInstanceState. Khi hệ điều hành muốn đưa hoạt động trở lại, nó sẽ gọi sự kiện onRestoreInstanceState.

Liên kết ở trên giải thích cách sử dụng ứng dụng SetAlwaysFinish để kiểm tra các sự kiện onSaveInstanceState và onRestoreInstanceState của ứng dụng của bạn. Nếu bạn muốn sử dụng DevTools, hãy bật Cài đặt Phát triển> Hủy ngay các hoạt động.

+0

Điều này thật tuyệt vời. Không bao giờ biết về điều đó và điều này làm việc hoàn hảo! – Kirk

+0

Thông tin tuyệt vời, dưới đây là một số đường dẫn cho những người khác http://developer.android.com/tools/debugging/debugging-devtools.html –

116

Nếu bạn đã bật Developer Tùy chọn trên thiết bị của bạn, có là một lựa chọn Đừng giữ hoạt động sẽ giúp kiểm tra onRestoreInstanceState().

+6

Đây phải là câu trả lời được chấp nhận, bởi vì nó mang lại kết quả dự đoán (bạn không phải mở số ngẫu nhiên ứng dụng ngẫu nhiên) và bạn không cần phải cài đặt ứng dụng của bên thứ ba có quyền truy cập root. –

+0

@ max.mustermann Không chỉ nó mang lại kết quả có thể dự đoán được nhưng đó là phương pháp dự định để kiểm tra trạng thái tiết kiệm và phục hồi. – Pijusn

+0

Trên thiết bị của tôi, không có hộp kiểm nào như vậy; thay vào đó là "Giới hạn quy trình nền". Nhưng đối với một số tùy chọn lý do "Không có quy trình nền" và "Tối đa 1 quy trình" không hoạt động; các ứng dụng đã bị phá hủy mà không có instanceState nào được lưu. Howewer, "Tối đa 2 quy trình" hoạt động tốt - bạn chỉ cần chuyển qua ít nhất ba ứng dụng để buộc hệ thống hủy ứng dụng của bạn. Có lẽ nó sẽ tiết kiệm thời gian của ai đó. –

9

Chúng tôi gặp sự cố trong đó việc khởi chạy lại ứng dụng sau một thời gian dài không hoạt động bị lỗi. Chúng tôi thấy rằng "Không giữ hoạt động" không tái tạo sự cố, nhưng Background process settings :: No background processes trong Cài đặt Dev đã làm (ngay cả khi đang gỡ lỗi).

+1

Tuyệt vời. Tôi đã kiểm tra Không có quy trình nền và nó hoạt động. Tôi đang ở 5.1.1. Cảm ơn – thuongle

1

Có một cách khác để kiểm tra các sự kiện này. Trước tiên, bạn phải điều hướng đến Hoạt động cụ thể mà bạn muốn thử nghiệm, sau đó nhấn nút trang chủ và chuyển đến màn hình thiết bị Android.

Android device monitor location

Android device monitor example

Trong công cụ này, bạn có thể chọn một chủ đề của các ứng dụng và giết nó bằng nút Stop. Cuối cùng, bạn phải mở ứng dụng từ lịch sử và chuỗi sẽ được tạo lại.

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