Trong quá trình phát triển ứng dụng, bài toán thường gặp nhất là bài toán lưu trữ dữ liệu tạm như configs, http response hoặc một “cờ” bật tắt tính năng nào đó. Khi đó chúng ta thường nghĩ ngay đến giải pháp đơn giản nhất là sử dụng SharedPreferences, nó giúp chúng ta xử lý bài toán vô cùng đơn giản, nhỏ gọn và tiện lợi.
Mọi chuyện sẽ chẳng có vấn đề gì cho đến khi bài toán của ứng dụng mở rộng hơn. Ví dụ như:
Làm thế nào để mã hoá dữ liệu trong SharedPreferences?
Làm thế nào để lấy dữ liệu từ nhiều process khác nhau?
Làm sao để lưu những tập dữ liệu lớn hơn?
Làm sao để tăng tốc độ đọc/ghi?
Đến đây chúng nhận ra những điểm bất lợi của kỹ thuật quen thuộc này. Lý do là SharedPreferences được lưu dưới dạng file với tên tương ứng. Dung lượng giới hạn của file này vào khoảng 1.42MB, với dung lượng này khi gặp các bài toán liên quan đến việc Cache Response hoặc các data lớn được mã hoá dưới dạng String thì sẽ gặp vấn đề.
Để giải quyết vấn đề này, Tecent – một hãng công nghệ lớn ở Trung Quốc đã sáng tạo ra một thư viện có tên là MMKV – Thư viện mà chúng ta sẽ tìm hiểu ngay sau đây.
MMKV có các ưu điểm sau:
- Tốc độ đọc ghi nhanh
- Hỗ trợ đọc/ghi dữ liệu giữa các Thread, Service khác nhau
- Hỗ trợ mã hoá dữ liệu
- Dễ dàng sử dụng
- Là một thư viện nhưng khá nhẹ nhàng, chỉ chiếm 50KB dung lượng của ứng dụng
Hiệu năng
Tốc độ của thư viện rất đáng để chú ý. Khi lên bàn cân đo về tốc độ so với người đàn anh SharedPreferences thì MMKV chiến thắng áp đảo với tốc độ vượt trội.
Như bạn đã thấy, MMKV đã chiến thắng ở tất cả các mặt trận liên quan đến Hiệu năng. Vậy chúng ta bắt đầu tìm hiểu xem, cách sử dụng của một thư viện mạnh mẽ này như thế nào nhé 🥰.
Cách dùng
Đầu tiên, bạn import vào Gradle của app
dependencies { implementation 'com.tencent:mmkv-static:1.2.4' }
Sau đó bạn init tại method onCreate của Application
public void onCreate() { super.onCreate(); String rootDir = MMKV.initialize(this); System.out.println("mmkv root: " + rootDir); }
Tiếp theo thì bạn dùng như SharedPreferences
import com.tencent.mmkv.MMKV; MMKV kv = MMKV.defaultMMKV(); kv.encode("bool", true); boolean bValue = kv.decodeBool("bool"); kv.encode("int", Integer.MIN_VALUE); int iValue = kv.decodeInt("int"); kv.encode("string", "Hello from mmkv"); String str = kv.decodeString("string");
Link GitHub: https://github.com/Tencent/MMKV
Tham khảo
https://github.com/Tencent/MMKV/wiki/android_benchmark