2013-04-04 38 views
5

Tôi đang phát triển một ứng dụng Android và lần đầu tiên làm việc với các nhà quan sát nội dung. Vì vậy, tôi đọc rất nhiều hướng dẫn và có khái niệm rằng tại sao nó được cung cấp và cách sử dụng.Tại sao và khi nào để hủy đăng ký người quan sát nội dung trong android

Bây giờ tôi đã đọc những dòng này trên một blog mà

Dont quên unregister quan sát nội dung

Vì vậy, tôi không thể hiểu được nếu tôi muốn đăng ký một ContentObserver sau đó những gì có thể là tình huống mà tôi phải hủy đăng ký.

Nếu mục đích của người quan sát được hoàn thành thì ok, chúng tôi có thể hủy đăng ký nó. Nhưng tôi phải quan sát cho đến khi người dùng gỡ cài đặt ứng dụng, vậy tại sao tôi sẽ hủy đăng ký người quan sát.

Đây là url của blog mà

http://www.grokkingandroid.com/use-contentobserver-to-listen-to-changes/

Trả lời

4

Hãy tưởng tượng bạn có một ứng dụng giả sử màn hình danh sách bạn bè được tạo bằng cách sử dụng FriendListActivity. Bây giờ để tạo giao diện người dùng cho hoạt động này, bạn đọc dữ liệu từ DB và tạo giao diện người dùng của mình.

Bây giờ hãy tưởng tượng rằng bạn cũng có một dịch vụ chạy ẩn và đồng bộ cơ sở dữ liệu này với cơ sở dữ liệu từ xa bằng các dịch vụ web.

Bây giờ bất cứ khi nào dịch vụ cập nhật danh sách bạn bè trong DB, bạn cũng muốn cập nhật giao diện người dùng của mình cho phù hợp. Vì vậy, để đạt được điều này, bạn sẽ đăng ký người quan sát nội dung trong số FriendListActivity tại thời điểm Activity khởi chạy cho Bạn bè URI (giả định rằng khái niệm về URI), để bất cứ khi nào danh sách bạn bè trong cơ sở dữ liệu thay đổi, bạn cũng sẽ cập nhật danh sách bạn bè trong FriendListActivity . Bây giờ nếu người dùng di chuyển ra khỏi hoạt động của bạn hoặc đóng ứng dụng thì bạn không cần phải cập nhật giao diện người dùng của mình (vì vậy bạn không cần phải nhận sự kiện cho thay đổi DB), vì vậy bạn sẽ hủy đăng ký người quan sát nội dung.

Bây giờ lần sau dùng đến màn hình này, bạn sẽ một lần nữa tìm nạp dữ liệu mới nhất và đăng ký với DB cho những thay đổi nội dung ...

Vì vậy, các nhà quan sát nội dung thường là một mối quan hệ giữa hoạt động và cơ sở dữ liệu (hoặc URI cụ thể). SO bạn sẽ đăng ký nó khi Activity được tung ra và unregister nó khi hoạt động đi ra khỏi quan điểm ..

Hope this helps ...

+0

Cảm ơn lời giải thích tuyệt vời dành cho bạn. –

6

xin vui lòng đọc một liên kết mà bạn cũng được cung cấp, trong đó nêu rõ

Bạn đăng ký quan sát của bạn trong onResume() phương pháp vòng đời và bạn unregister nó trong phương thức onPause().

sau khi bạn hủy đăng ký một trong các phương thức này .it sẽ không observe bất kỳ giá trị nào và cũng sẽ không cung cấp bất kỳ số nào memory leak.

@override 

    public void onDestroy() 
    { 

getContentResolver(). 
     unregisterContentObserver(yourObserver); 

    } 

hoặc bạn có thể làm điều này cũng

@override 

    public void onPause() 
    { 
    getContentResolver(). 
    unregisterContentObserver(yourObserver); 

    } 
+0

Nó phụ thuộc vào bạn nơi bạn muốn hủy đăng ký nó. – Unknown

2

Trong bài viết trên blog, nó khẳng định:

Khi bạn đã đăng ký một người quan sát nội dung, đó là trách nhiệm của bạn cũng unregister nó . Nếu không, bạn sẽ tạo ra một rò rỉ bộ nhớ và hoạt động của bạn sẽ không bao giờ được thu gom rác thải.

Vì vậy, khi Activity của bạn đóng, bạn nên hủy đăng ký - điều này nên được thực hiện theo phương pháp . sẽ luôn được gọi, bất cứ khi nào bạn rời khỏi Activity.

Check-out vòng đời cho Activities: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

9

Có một cái nhìn tại activity lifecycle:

Activity lifecycle

  • Nếu bạn đăng ký một người quan sát trong onCreate bạn hủy đăng ký trong onDestroy
  • Nếu bạn đăng ký một người quan sát trong số onStart bạn hủy đăng ký trong onStop
  • Nếu bạn đăng ký một người quan sát trong onResume bạn hủy đăng ký trong

Vì chỉ có một hoạt động có thể được hiển thị cùng một lúc, tôi sẽ khuyên bạn sử dụng tùy chọn cuối cùng.

+0

Đây là câu trả lời tôi đang tìm kiếm! Nice và súc tích nhưng địa chỉ nhiều tình huống chính xác! – YoungCoconutCode

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