Nếu bạn phải sử dụng (và giữ lại) một lượng lớn bộ nhớ, thì có, bạn có thể và nên sử dụng android:largeHeap="true"
. Nhưng nếu bạn sử dụng nó, bạn nên chuẩn bị để ứng dụng của bạn bị xóa khỏi bộ nhớ mỗi khi các ứng dụng khác ở phía trước.
Bằng cách "chuẩn bị", ý tôi là bạn nên thiết kế theo khả năng đó, để các phương thức onStop()
và onResume()
phương thức của bạn được viết hiệu quả nhất có thể, đồng thời đảm bảo rằng tất cả trạng thái thích hợp được lưu và khôi phục theo cách thể hiện diện mạo liền mạch cho người dùng.
Có ba phương pháp có liên quan đến thông số này: maxMemory()
, getMemoryClass()
, và getLargeMemoryClass()
.
Đối với hầu hết các thiết bị, maxMemory()
sẽ biểu thị một giá trị tương tự getMemoryClass()
theo mặc định, mặc dù cái sau được biểu thị bằng megabyte, trong khi cái trước được biểu thị bằng byte.
Khi bạn sử dụng largeHeap
tham số, maxMemory()
sẽ được tăng lên mức cao hơn dành riêng cho thiết bị, trong khi getMemoryClass()
sẽ giữ nguyên.
getMemoryClass()
không giới hạn kích thước heap của bạn, nhưng nó cho bạn biết số lượng heap bạn nên sử dụng nếu bạn muốn ứng dụng của mình hoạt động thoải mái và tương thích trong giới hạn của thiết bị cụ thể mà bạn đang chạy.
maxMemory()
, ngược lại, sẽ hạn chế kích thước heap của bạn và do đó bạn có quyền truy cập vào heap bổ sung thông qua việc tăng giá trị của nó và largeHeap
tăng giá trị đó. Tuy nhiên, lượng heap tăng vẫn còn hạn chế và giới hạn đó sẽ dành riêng cho thiết bị, điều đó có nghĩa là lượng heap có sẵn cho ứng dụng của bạn sẽ thay đổi, tùy thuộc vào tài nguyên của thiết bị mà ứng dụng của bạn đang chạy. Vì vậy, việc sử dụng largeHeap
không phải là một lời mời để ứng dụng của bạn từ bỏ tất cả sự thận trọng và tìm đường đi qua bữa tiệc buffet hoàn toàn có thể ăn.
Ứng dụng của bạn có thể khám phá chính xác dung lượng bộ nhớ sẽ được cung cấp trên một thiết bị cụ thể thông qua việc sử dụng largeHeap
tham số bằng cách gọi phương thức getLargeMemoryClass()
. Giá trị được trả về là megabyte.
Bài đăng trước đó bao gồm một cuộc thảo luận về largeHeap
tham số, cũng như một số ví dụ về số lượng heap được cung cấp có và không có việc sử dụng nó, trên một số thiết bị Android cụ thể:
Phát hiện kích thước heap ứng dụng trong Android
Tôi chưa triển khai bất kỳ ứng dụng nào của riêng mình với thông số này được đặt thành đúng. Tuy nhiên, tôi có một số mã sử dụng nhiều bộ nhớ trong một trong các ứng dụng của mình để biên dịch một tập hợp các tham số liên quan đến tối ưu hóa, chỉ chạy trong quá trình phát triển. Tôi chỉ thêm largeHeap
tham số trong quá trình phát triển, để tránh lỗi bộ nhớ trong khi chạy mã này. Nhưng tôi xóa tham số (và mã) trước khi triển khai ứng dụng.