2011-09-09 35 views
13

Tôi muốn biết cách chức năng onLowMemory() được thực hiệnonLowMemory hoạt động như thế nào trên Android?

cho ví dụ:

Giả sử tôi có 3 hoạt động với chức năng onLowMemory() được ghi đè để xóa dữ liệu khỏi RAM. Tôi cũng có 1 lớp Application cũng ghi đè onLowMemory() để xóa một số dữ liệu trạng thái toàn cầu.

Bây giờ, giả sử chúng ta đi từ hoạt động A -> hoạt động B -> hoạt động C và hoạt động C, chúng tôi hết bộ nhớ. Câu hỏi của tôi là những gì xảy ra sau đó?

Từ những gì tôi hiểu, onLowMemory() chức năng của Hoạt động C và Lớp ứng dụng sẽ được gọi, tôi có đúng không? Chức năng của hoạt động A và B có được gọi là onLowMemory() không?

Ngoài ra tôi tin rằng Hoạt động A và B sẽ bị giết (vì chúng là hoạt động nền), nhưng trước khi các hoạt động đó bị giết, hãy gọi số onLowMemory() tương ứng của chúng?

Trả lời

2

Theo Tài liệu http://developer.android.com/reference/android/app/Application.html#onLowMemory%28%29

điểm chính xác mà điều này sẽ được gọi là không được định nghĩa, nói chung là nó sẽ xảy ra xung quanh thời điểm đó tất cả các tiến trình nền đã bị giết, đó là trước khi đến điểm của các quá trình giết dịch vụ lưu trữ và giao diện người dùng tiền cảnh mà chúng tôi muốn tránh bị giết.

+2

Chức năng onLowMemory của hoạt động nền có được gọi không? hoặc chỉ là hoạt động tiền cảnh/hiển thị –

2

cuộc đàm phán google về chức năng này trong một trong những video của họ:

http://www.youtube.com/watch?v=gbQb1PVjfqM&feature=player_embedded#t=682s

tuy nhiên

, tôi nghĩ rằng nó vẫn còn chưa rõ ràng khi một phương pháp như vậy được gọi, và nếu nó có thể giúp tránh ứng dụng của chúng tôi bị giết như kết quả của việc có rất nhiều quy trình và chúng tôi mất rất nhiều bộ nhớ.

4

Khi bộ nhớ của điện thoại yếu, các quy trình nền sẽ bị xóa theo khung. Nếu quá trình nền cuối cùng bị hủy, khung sẽ gọi onLowMemory của mọi ứng dụng.

Điều này được mô tả trong mã nguồn. Xem: https://github.com/android/platform_frameworks_base/blob/master/services/java/com/android/server/am/ActivityManagerService.java#L3088

// If there are no longer any background processes running, 
    // and the app that died was not running instrumentation, 
    // then tell everyone we are now low on memory. 
Các vấn đề liên quan