DI ĐỘNG VÀ PHƯƠNG PHÁP PHÁT TRIỂN LINH HOẠT
2.2. Kỹ thuật phân tích và tái cấu trúc mã nguồn để nâng cao hiệu năng của ứng dụng d
2.2.3.2. Sử dụng bộnhớ hiệu quả
Bộ nhớ truy cập ngẫu nhiên (RAM) là một nguồn tài ngun có giá trị trong bất kỳ mơi trường phát triển phần mềm, nhưng nó thậm chí cịn giá trị hơn một hệ điều hành di động, nơi bộ nhớ vật lý thường bị hạn chế. Để tăng hiệu suất chương trình sử dụng nên quản lý và cấp phát bộ nhớ một cách hiệu quả.
- Sử dụng dịch vụ một cách hợp lý: Nếu ứng dụng cần một dịch vụ để thực hiện cơng việc nền, khơng nên giữ cho nó chạy trừ khi nó đang thực hiện một cơng việc. Khi bắt đầu chạy một dịch vụ thì hệ thống ln chiếm giữ dịch vụ đó khi cho rằng nó đang hoạt động. Điều này dẫn đến việc trưng dụng bộ nhớ RAM làm giảm số lượng của quá trình lưu trữ hệ thống trong bộ nhớ cache LRU gây cho ứng dụng chuyển đổi kém hiệu quả, cho nên cần sử dụng một IntentService được kết thúc bởi chính nó ngay sau khi hồn thành cơng việc xử lý.
- Giải phóng bộ nhớ khi giao diện người dùng được điều hướng: Khi người dùng điều hướng đến các ứng dụng khác nhau và giao diện ứng dụng khơng cịn nhìn thấy, cần giải phóng bất kỳ nguồn tài nguyên được sử dụng bởi giao diện của
ứng dụng, điều đó có thể làm tăng đáng kể khả năng của hệ thống trong q trình lưu trữ, trong đó có tác động trực tiếp đến chất lượng trải nghiệm của người dùng.
- Giải phóng khi bộ nhớ tràn: Trong vòng đời của ứng dụng, lời gọi onTrimMemory() cũng thông báo cho chúng ta biết khi bộ nhớ điện thoại ở mức thấp, nên xử lý giải phóng tài nguyên dựa trên các mức độ mà lời gọi hàm onTrimMemory() cung cấp: TRIM_MEMORY_RUNNING_MODERATE. - Ứng dụng đang chạy nhưng bộ nhớ thiết bị đang ở mức thấp vì vậy hệ thống sẽ
loạibỏcáctiếntrìnhtrongbộnhớcacheLRU: TRIM_MEMORY_RUNNING_LOW
- Ứng dụng đang chạy nhưng thiết bị chạy rất chậm vì vậy nên giải phóng mọi tài ngun khơng sử dụng để cải thiện hiệu năng hệ thống:
TRIM_MEMORY_RUNNING_CRITICAL.
- Ứng dụng đang chạy nhưng hệ thống đã loại bỏ hầu hết các quá trình trong bộ nhớ cache LRU, cần giải phóng mọi nguồn tài ngun khơng quan trọng và nếu hệ thống khơng đủ lượng RAM cần thiết hoạt động thì nó sẽ xóa tất cả bộ nhớ cache LRU.
- Kiểm tra dung lượng bộ nhớ: Mỗi thiết bị Android có số lượng RAM khác nhau trong hệ thống và do đó cung cấp một khơng gian lưu trữ khác nhau cho mỗi ứng dụng. Có thể gọi hàm getMemoryClass() để có thể ước tính dung lượng mà
ứng dụng đó cần. Nếu ứng dụng đó trưng dụng nhiều hơn dung lượng có sẵn hệ thống sẽ thơng báo OutOfMemoryError. Trong những tình huống đặc biệt có thể u cầu kích thước bộ nhớ heap lớn hơn bằng cách thiết lập trong tag <application> largeHeap với giá trị “True” và khi đó sẽ gọi hàm getLargeMemoryClass(). Bằng cách sử dụng thêm bộ nhớ sẽ càng ngày càng làm giảm hiệu suất chương trình vì thu gom rác sẽ mất nhiều thời gian.
Hạn chế việc sử dụng thư viện bên ngoài: mã thư viện bên ngồi thường khơng được viết cho môi trường di động và không hiệu quả khi được sử dụng trên thiết bị di động. Thiết kế để sử dụng trên Android có thể cũng gây nguy hiểm bởi vì mỗi thư viện có thể làm những việc khác nhau, cần phải cẩn thận việc sử dụng thư viện chia sẻ cho một hoặc hai tính năng ra hàng chục thứ khác nó, điều này sẽ tạo ra một lượng lớn các chi phí mà khơng sử dụng.