Tối ưu hoá bộ nhớ ứng dụng
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Bộ nhớ là một tài nguyên quan trọng trong mọi môi trường phát triển phần mềm, thậm chí còn quan trọng hơn nữa trên hệ điều hành dành cho thiết bị di động do nơi này thường có bộ nhớ thực bị hạn chế. Điều này đặc biệt đúng đối với những thiết bị vốn có bộ nhớ thấp, thường thấy trên Android (phiên bản Go). Có một số cách tối ưu hoá bộ nhớ để giúp ứng dụng chạy mượt mà trong các môi trường này.
Các phương pháp hay nhất
Giải phóng bộ nhớ đệm
Nếu bạn chạy các quy trình trong nền giống như ở môi trường thông thường, tình trạng không đủ bộ nhớ có thể xảy ra. Trong trường hợp này, bạn có thể dùng onTrimMemory()
để cắt giảm bộ nhớ không cần thiết khỏi quy trình của ứng dụng. Để xác định đúng nhất mức độ cắt giảm hiện tại cho ứng dụng, hãy dùng ActivityManager.getMyMemoryState(RunningAppProcessInfo)
để tối ưu hoá hoặc cắt giảm mọi tài nguyên không cần thiết. Ví dụ: bạn có thể cắt giảm mức sử dụng bộ nhớ không cần thiết khỏi các biểu thức, lệnh tìm kiếm, bộ nhớ đệm của khung hiển thị hoặc các phần mở rộng để giảm số lần ứng dụng gặp sự cố hoặc lỗi ANR do bộ nhớ sắp hết.
Lên lịch tác vụ
Khi lên lịch đồng thời, nhiều hoạt động tốn bộ nhớ có thể chạy song song, dẫn đến tình trạng cạnh tranh tài nguyên vượt quá mức sử dụng bộ nhớ cao điểm của ứng dụng. Hãy tìm cách phân bổ hợp lý tài nguyên bằng cách phân chia các quá trình thành nhiều tác vụ thiên về CPU, độ trễ thấp trong nhóm luồng để chạy trên các thiết bị có những giới hạn về tài nguyên.
Rò rỉ bộ nhớ
Nhiều công cụ, chẳng hạn như Trình phân tích bộ nhớ trong Android Studio và Perfetto được cung cấp riêng để giúp tìm và giảm thiểu tình trạng rò rỉ bộ nhớ trong ứng dụng. Bạn nên dùng những công cụ này để xác định và khắc phục các vấn đề tiềm ẩn về bộ nhớ nhằm giúp các thành phần khác của ứng dụng chạy mà không tạo thêm áp lực cho hệ thống.
Các mẹo khác
- Hình ảnh và đối tượng có thể vẽ với kích thước lớn sẽ dùng nhiều dung lượng bộ nhớ hơn trong ứng dụng. Hãy xác định và tối ưu hoá cấu trúc bitmap kích thước lớn hoặc đầy đủ màu sắc để giảm mức sử dụng bộ nhớ.
- Thử chọn các tuỳ chọn khác cho tệp GIF trong ứng dụng khi xây dựng cho Android (phiên bản Go) vì tệp GIF sử dụng rất nhiều dung lượng bộ nhớ.
- Bạn có thể dùng các công cụ như WebP, pngcrush và pngquant để giảm kích thước tệp PNG mà vẫn giữ nguyên chất lượng ảnh. Tất cả những công cụ này đều giúp giảm kích thước tệp PNG nhưng vẫn giữ nguyên chất lượng ảnh theo cảm nhận.
- Nhờ chức năng nén giữ nguyên chất lượng trong quy trình xây dựng, công cụ aapt có thể tối ưu hoá các tài nguyên hình ảnh được đặt trong
res/drawable/
. Ví dụ: công cụ aapt có thể chuyển đổi tệp PNG màu thực không yêu cầu nhiều hơn 256 màu thành tệp PNG 8 bit với bảng màu. Nếu bạn làm như vậy, hình ảnh sẽ có chất lượng tương đương, nhưng mức sử dụng bộ nhớ sẽ giảm đi.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[null,null,["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[],null,["# Optimize app memory\n\nMemory is a valuable resource in any software development environment, but it's\neven more valuable on a mobile operating system where physical memory is often\nconstrained. This is especially true for natively low-memory devices found\ncommonly with Android (Go edition). There are a few ways to help optimize memory\nin your app to help it run smoothly in these environments.\n\nBest practices\n--------------\n\n### Release cache memory\n\nThere may not be enough memory to keep background processes running as you\nwould in a typical environment. In this case, you can use\n[`onTrimMemory()`](/reference/android/content/ComponentCallbacks2#onTrimMemory(int))\nto trim unneeded memory from your app's process. To best\nidentify the current trim level for your app, use\n[`ActivityManager.getMyMemoryState(RunningAppProcessInfo)`](/reference/android/app/ActivityManager#getMyMemoryState(android.app.ActivityManager.RunningAppProcessInfo))\nand optimize or trim any unnecessary resources. For example, you can trim\nunnecessary memory usage from\nexpressions, search, view cache, or openable extensions to reduce the number of\ntimes your app experiences crashes or ANRs due to low memory.\n\n### Task scheduling\n\nConcurrent scheduling can lead to multiple memory intensive operations to run\nin parallel, leading to competition for resources exceeding the peak memory\nusage of an app. Try to appropriately allocate resources by separating processes\ninto CPU intensive, low latency tasks in the right\n[thread pool](/guide/background/threading) to run on devices that may face\nvarious resource constraints.\n\n### Memory leaks\n\nVarious tools, such as\n[Memory Profiler](/studio/profile/memory-profiler) in Android Studio and\n[Perfetto](https://perfetto.dev/docs/case-studies/memory) are\nspecifically available to help find and reduce memory leaks within your app.\nIt's highly encouraged that you use these tools to identify and fix potential\nmemory issues to allow other components of your app to run without additional\npressure on the system.\n\n### Other tips\n\n- Large images or drawables consume more memory in apps. Identify and optimize large or full-colored bitmaps to reduce memory usage.\n- Try to choose other options for GIFs in your app when building for Android (Go edition) as GIFs consume a lot of memory.\n- You can reduce PNG file sizes without losing image quality using tools like [WebP](/studio/write/convert-webp), pngcrush, and pngquant. All of these tools can reduce PNG file size while preserving the perceptive image quality.\n- The aapt tool can optimize the image resources placed in `res/drawable/` with lossless compression during the build process. For example, the aapt tool can convert a true-color PNG that does not require more than 256 colors to an 8-bit PNG with a color palette. Doing so results in an image of equal quality but a smaller memory footprint."]]