2015-03-22 14 views
8

Trong ứng dụng Android của tôi có tên là "PriceDekho", quá trình nền bộ nhớ cache chiếm quá nhiều không gian. Lần đầu tiên khi tôi khởi động ứng dụng, ứng dụng sẽ có arround 30MB (tôi nghĩ OK) nhưng vấn đề là khi tôi lướt các trang ứng dụng thì kích thước này sẽ tăng liên tục tối đa (200 MB). Ứng dụng này "Quy trình nền bộ nhớ cache" cũng thay đổi theo kích thước RAM di động. Nếu kích thước RAM di động là 2GB thì ứng dụng này "Cache background process" có kích thước tối đa 500 đến 700 MB.Quá trình nền bộ nhớ cache của Android đang tăng liên tục

Ứng dụng của tôi chỉ có từ 5 đến 6 màn hình. Tôi chỉ cần ổn định kích thước nền được lưu trong bộ nhớ cache.

Tôi làm cách nào để xóa kích thước được lưu trong bộ nhớ cache của ứng dụng? Hãy giúp tôi.

enter image description here

enter image description here

+0

Bạn có 'android: largeHeap =" true "' trong tệp kê khai của mình không? Bạn đang sử dụng mã được biên dịch NDK? Giới hạn heap thông thường của bạn phải nhỏ hơn 186MB, vì vậy tôi không chắc chắn cách bạn phân bổ nhiều RAM này. Bạn có thể sử dụng 'procstats' để tìm hiểu thêm: http://android-developers.blogspot.com/2014/01/process-stats-understanding-how-your.html – CommonsWare

+0

@CommonsWare Có tôi đang sử dụng android: largeHeap =" true " bất động sản. Không sử dụng mã được biên dịch NDK. Và tôi không biết tại sao kích thước này lại tăng liên tục. 186MB chỉ là một ví dụ kích thước tối đa 300 MB. Tôi không thực hiện bất kỳ thao tác nào trong mã của tôi liên quan đến quản lý RAM.xin vui lòng đề nghị làm thế nào tôi có thể làm giảm kích thước bộ nhớ cache RAM –

+0

Sử dụng MAT trên một bãi chứa đống để xem những gì đang trôi nổi xung quanh không gian heap của bạn. Và hãy xem xét lại việc bạn sử dụng 'android: largeHeap =" true "'. – CommonsWare

Trả lời

7

Có vẻ như bạn có rò rỉ bộ nhớ mà các bộ thu rác không thể loại bỏ. Ví dụ, nếu bạn cần phải có một tham chiếu đến các Context từ một lớp không bối cảnh mà không bao giờ được phát hành ở đó. Hầu hết thời gian Android Studio sẽ chỉ ra những điều đó nhưng bạn có thể thử sử dụng LeakCanary và tìm kiếm chúng.

Thêm phụ thuộc

dependencies { 
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1' 
} 

và sử dụng nó trong lớp Application của bạn. Tạo một tài khoản nếu bạn chưa có.

public class ExampleApplication extends Application { 

    @Override public void onCreate() { 
    super.onCreate(); 
    if (LeakCanary.isInAnalyzerProcess(this)) { 
     // This process is dedicated to LeakCanary for heap analysis. 
     // You should not init your app in this process. 
     return; 
    } 
    LeakCanary.install(this); 
    // Normal app init code... 
    } 
} 
+0

Thỉnh thoảng nó treo ứng dụng của tôi và cửa sổ bật lên xuất hiện trên màn hình của tôi, điều này rất khó chịu –

1

Quy trình nền bộ nhớ cache chắc chắn thay đổi theo kích thước RAM như hệ thống sẽ cho phép nhiều dữ liệu được lưu vào bộ nhớ nếu có nhiều bộ nhớ hơn.

Tuy nhiên, mô hình ngày càng tăng trong việc sử dụng bộ nhớ của ứng dụng có thể do rò rỉ bộ nhớ hoặc các đối tượng lớn được tạo trong nền. Nhà sưu tập rác không phải là một người bạn thời tiết và có thể có xu hướng bỏ qua những rò rỉ bộ nhớ do những sai lầm có lập trình.

như không có mã đăng để xem xét, một số câu hỏi tầm thường hỏi sẽ là:

  • Có rất nhiều xử lý hình ảnh được thực hiện sử dụng bitmap? Nếu có, các bitmap đó có được tái chế không?
  • Ứng dụng của bạn có sử dụng ngữ cảnh một cách thận trọng, đó là tránh sử dụng ngữ cảnh ứng dụng, trừ khi được yêu cầu?
  • Người nghe chưa đăng ký, nếu có?

    Như đã đề xuất ở trên, LeakCanary chắc chắn sẽ hữu ích hơn rất nhiều trong trường hợp này, chắc chắn hơn Màn hình Android.

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