2011-01-27 29 views
5

Tôi có Hoạt động, để lưu dữ liệu của nó trong trường hợp hệ thống quyết định tiêu diệt dữ liệu trong khi đang ở chế độ nền. Vì vậy, tôi đã có onSaveInstanceState:Thử nghiệm vòng đời hoạt động của Android

@Override 
protected void onSaveInstanceState(Bundle outState){ 
    outState.putString("value", "some_value"); 
} 

tôi kiểm tra xem đối tượng Bundle là null trong onCreate:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    isRestarted=(savedInstanceState==null); 

Làm thế nào để viết phương pháp thử nghiệm? Tôi đã thử

public void testRecreate(){ 
    Instrumentation mInstr=this.getInstrumentation(); 
    mInstr.callActivityOnSaveInstanceState(mActivity, null); 
    mActivity.finish(); 
    mActivity=this.getActivity(); 
    assertEquals(false, mActivity.isRestarted); 
} 

nhưng có vẻ như sai.

Trả lời

0

Nếu bạn chưa từng trải qua trước đó, tôi thấy nó đáng giá đến do this ít nhất một lần.

+0

http://developer.android.com/resources/tutorials/testing/activity_test.html => liên kết bị hỏng :( – Macarse

+0

Tôi đã thực hiện xong nhưng vấn đề của tôi dường như hơi phức tạp hơn một chút –

0

Các nội dung như vậy có thể dễ dàng kiểm tra bằng cách sử dụng robolectric. Kiểm tra nó ra!

6

Bạn có thể sử dụng một số chức năng API ẩn. Trong thiết lập của thử nghiệm của bạn, gọi phương thức

android.app.ActivityManagerNative.getDefault().setAlwaysFinish() 

thông qua phản ánh (vì đó là một API ẩn) và xác nhận rằng giá trị đã được thiết lập thành công sử dụng

android.provider.Settings.System.getInt(getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0) 

Sau đó, trong dọn dẹp kiểm tra, thiết lập lại cài đặt này thành sai.

Bật cài đặt AlwaysFinish khiến hệ thống hủy hoạt động ngay khi chúng không còn trên màn hình, ngay lập tức kích hoạt sự kiện onSaveInstanceState. Để mã này hoạt động, bạn cần có các quyền ALWAYS_FINISHWRITE_SETTINGS.

Xem mã cho công cụ SetAlwaysFinish liên kết trong blog này: How to test onSaveInstanceState and onRestoreInstanceState on a real device

+0

Cảm ơn bạn đã tham gia thời gian để đặt này lại với nhau Theo. Đẹp làm việc – ohhorob

+0

Tôi không thể có được setAlwaysFinish.apk để làm việc trên Android 4.0.3. Nó đưa ra, nhưng việc kiểm tra hộp kiểm tra không có bất kỳ hiệu lực Chỉ cần một cảnh báo.Nếu onCreate là không được gọi sau khi hoạt động được cho là đã hoàn thành, setAlwaysFinish không thực hiện công việc. – Nilzor

1

Đối với kiểm tra thủ công, các công trình thường xuyên này:

  1. Launch hoạt động bạn muốn kiểm tra
  2. Nhấn nút menu nhà trên thiết bị của bạn (hoạt động bị dừng)
  3. Giết quá trình từ DDMS (hoạt động vẫn là not destroyed)
  4. Mang lại ứng dụng của bạn một lần nữa từ recent apps list

này nên kích hoạt onCreate một lần nữa vào hoạt động của bạn trong khi không khởi động lại toàn bộ ứng dụng. Nếu bạn không lưu và tải trạng thái đúng cách, bạn sẽ biết sớm đủ.

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