Truy cập bộ nhớ trong Android
Trong nhiều trường hợp, ứng dụng của bạn sẽ tạo các tệp mà những ứng dụng khác không cần truy cập hoặc không được truy cập. Hệ thống cung cấp những vị trí sau để lưu trữ các tệp dành riêng cho ứng dụng như vậy: Show
Khi người dùng gỡ cài đặt ứng dụng của bạn, các tệp lưu trong bộ nhớ dành riêng cho ứng dụng sẽ bị xoá. Do đó, bạn không nên dùng bộ nhớ này để lưu bất cứ dữ liệu nào mà người dùng muốn lưu trữ độc lập với ứng dụng của bạn. Ví dụ: nếu ứng dụng của bạn cho phép người dùng chụp ảnh, thì người dùng vẫn muốn truy cập được những bức ảnh đó ngay cả sau khi gỡ cài đặt ứng dụng. Vì vậy, bạn nên sử dụng bộ nhớ dùng chung để lưu các loại tệp đó vào bộ sưu tập nội dung đa phương tiện thích hợp. Những phần sau đây mô tả cách lưu trữ và truy cập tệp trong các thư mục dành riêng cho ứng dụng. Truy cập từ bộ nhớ trongĐối với mỗi ứng dụng, hệ thống sẽ cung cấp các thư mục thuộc bộ nhớ trong, nơi ứng dụng có thể sắp xếp các tệp riêng. Một thư mục được thiết kế để lưu các tệp bền vững của ứng dụng và một thư mục khác chứa các tệp đã lưu vào bộ nhớ đệm của ứng dụng. Ứng dụng của bạn không yêu cầu quyền hệ thống nào để đọc và ghi vào các tệp trong những thư mục này. Các ứng dụng khác không thể truy cập tệp được lưu vào bộ nhớ trong. Đặc điểm trên khiến bộ nhớ trong trở thành nơi phù hợp để lưu dữ liệu ứng dụng mà ứng dụng khác không được truy cập. Tuy nhiên, hãy lưu ý rằng các thư mục này thường có xu hướng nhỏ. Trước khi ghi các tệp dành riêng cho ứng dụng vào bộ nhớ trong, ứng dụng của bạn nên truy vấn dung lượng trống trên thiết bị. Truy cập vào các tệp bền vữngCác tệp thông thường, bền vững của ứng dụng nằm trong một thư mục mà bạn có thể truy cập thông qua thuộc tính
Truy cập và lưu trữ tệpBạn có thể dùng API Để giúp duy trì hiệu suất của ứng dụng, đừng mở và đóng cùng một tệp nhiều lần. Đoạn mã sau đây minh hoạ cách sử dụng API
Lưu trữ tệp bằng một luồngThay vì sử dụng API Đoạn mã sau đây cho biết cách ghi một số văn bản vào tệp:
Để cho phép ứng dụng khác truy cập vào các tệp lưu trữ trong thư mục này thuộc bộ nhớ trong, hãy dùng Truy cập vào tệp bằng một luồngĐể đọc tệp ở dạng luồng, hãy dùng
Xem danh sách tệpBạn có thể lấy một mảng chứa tên của mọi tệp trong thư mục
Tạo các thư mục lồng nhauBạn cũng có thể tạo các thư mục lồng nhau, hoặc mở một thư mục bên trong, bằng cách gọi
Tạo các tệp bộ nhớ đệmNếu chỉ cần lưu trữ tạm thời dữ liệu nhạy cảm, bạn nên dùng thư mục bộ nhớ đệm được chỉ định của ứng dụng thuộc bộ nhớ trong để lưu dữ liệu. Tương tự như với trường hợp tất cả bộ nhớ dành riêng cho ứng dụng, các tệp lưu trữ trong thư mục này sẽ bị xoá khi người dùng gỡ cài đặt ứng dụng của bạn, mặc dù các tệp trong thư mục này có thể bị xoá sớm hơn. Để tạo một tệp được lưu vào bộ nhớ đệm, hãy gọi
Ứng dụng của bạn truy cập vào một tệp trong thư mục này bằng thuộc tính
Xoá các tệp bộ nhớ đệmMặc dù đôi khi, Android sẽ tự xoá các tệp bộ nhớ đệm, nhưng bạn không nên dựa vào hệ thống để dọn dẹp các tệp này. Bạn nên thường xuyên lưu tệp bộ nhớ đệm của ứng dụng vào bộ nhớ trong. Để xoá một tệp khỏi thư mục bộ nhớ đệm thuộc bộ nhớ trong, hãy dùng một trong các phương thức sau:
Truy cập từ bộ nhớ ngoàiNếu bộ nhớ trong không có đủ dung lượng để lưu trữ tệp dành riêng cho ứng dụng, hãy cân nhắc dùng bộ nhớ ngoài. Hệ thống cung cấp các thư mục trong bộ nhớ ngoài nơi ứng dụng có thể sắp xếp những tệp mang lại giá trị cho người dùng chỉ trong ứng dụng của bạn. Một thư mục được thiết kế để lưu các tệp bền vững của ứng dụng và một thư mục khác chứa các tệp được lưu vào bộ nhớ đệm của ứng dụng. Trên Android 4.4 (API cấp 19) trở lên, ứng dụng của bạn không cần yêu cầu quyền liên quan đến bộ nhớ để truy cập vào các thư mục dành riêng cho ứng dụng trong bộ nhớ ngoài. Các tệp lưu trữ trong những thư mục này sẽ bị xoá khi ứng dụng đó bị gỡ cài đặt. Trên các thiết bị chạy Android 9 (API cấp 28) trở xuống, ứng dụng của bạn có thể truy cập vào các tệp dành riêng cho ứng dụng thuộc ứng dụng khác, miễn là ứng dụng của bạn có quyền thích hợp liên quan đến bộ nhớ. Để mang lại cho người dùng nhiều quyền kiểm soát hơn đối với tệp của họ và giảm thiểu tình trạng tệp lộn xộn, các ứng dụng nhắm đến Android 10 (API cấp 29) trở lên được cấp quyền truy cập có giới hạn vào bộ nhớ ngoài, hoặc bộ nhớ có giới hạn, theo mặc định. Khi bạn bật bộ nhớ có giới hạn, các ứng dụng không thể truy cập vào thư mục dành riêng cho ứng dụng thuộc ứng dụng khác. Xác minh rằng bộ nhớ còn trốngVì bộ nhớ ngoài nằm trên một ổ đĩa thực mà người dùng có thể tháo, hãy xác minh rằng bạn truy cập được ổ đĩa trước khi tìm cách đọc/ghi dữ liệu dành riêng cho ứng dụng từ/vào bộ nhớ ngoài. Bạn có thể truy vấn trạng thái của ổ đĩa bằng
cách gọi Ví dụ: các phương thức sau đây hữu ích để xác định phạm vi cung cấp bộ nhớ:
Trên các thiết bị không có bộ nhớ ngoài di động, hãy dùng lệnh sau để bật ổ đĩa ảo nhằm kiểm thử logic phạm vi cung cấp bộ nhớ ngoài: adb shell sm set-virtual-disk true Chọn vị trí bộ nhớ thựcĐôi khi, thiết bị phân bổ một phân vùng của bộ nhớ trong làm bộ nhớ ngoài cũng cung cấp khe cắm thẻ SD. Nghĩa là thiết bị có nhiều ổ đĩa thực có thể chứa bộ nhớ ngoài, do đó, bạn cần chọn ổ đĩa sẽ dùng cho bộ nhớ dành riêng cho ứng dụng. Để truy cập vào nhiều vị trí, hãy gọi
Truy cập vào các tệp bền vữngĐể truy cập vào các tệp dành riêng cho ứng dụng từ bộ nhớ ngoài, hãy gọi Để giúp duy trì hiệu suất của ứng dụng, đừng mở và đóng cùng một tệp nhiều lần. Đoạn mã sau đây minh hoạ cách gọi
Tạo các tệp bộ nhớ đệmĐể thêm một tệp dành riêng cho ứng dụng vào bộ nhớ đệm trong bộ nhớ ngoài, hãy lấy thông tin tham chiếu đến
Xoá các tệp bộ nhớ đệmĐể xoá một tệp khỏi thư mục bộ nhớ đệm bên ngoài, hãy dùng phương thức
Nội dung đa phương tiệnNếu ứng dụng của bạn xử lý các tệp nội dung đa phương tiện mang lại giá trị cho người dùng chỉ trong ứng dụng của bạn, thì bạn nên lưu trữ các tệp đó trong thư mục dành riêng cho ứng dụng trong bộ nhớ ngoài, như minh hoạ trong đoạn mã sau:
Bạn cần phải sử dụng tên thư mục do các hằng số API cung cấp như Truy vấn dung lượng trốngNhiều người dùng không có nhiều không gian lưu trữ trên thiết bị, vì vậy, ứng dụng của bạn nên sử dụng dung lượng một cách hợp lý. Nếu biết trước lượng dữ liệu bạn sắp lưu trữ, thì bạn có thể nắm được mức dung lượng mà thiết bị có thể cung cấp cho ứng dụng của mình
bằng cách gọi Nếu có đủ dung lượng để lưu dữ liệu của ứng dụng, hãy gọi
Đoạn mã sau đây cho thấy một ví dụ về cách ứng dụng của bạn có thể truy vấn dung lượng trống trên thiết bị:
Tạo hoạt động quản lý bộ nhớỨng dụng của bạn có thể khai báo và tạo một hoạt động tuỳ chỉnh (khi được chạy) sẽ cho phép người dùng quản lý dữ liệu mà ứng dụng đó đã lưu trữ trên thiết bị của người dùng. Bạn khai báo hoạt động "quản lý dung lượng" tuỳ chỉnh này bằng thuộc tính Yêu cầu người dùng xoá một số tệp trên thiết bịĐể yêu cầu người dùng xoá các tệp trên thiết bị, hãy gọi một ý định bao gồm hành động StorageStatsManager.getFreeBytes() / StorageStatsManager.getTotalBytes() Yêu cầu người dùng xoá mọi tệp bộ nhớ đệmNgoài ra, bạn có thể yêu cầu người dùng xoá tệp bộ nhớ đệm khỏi tất cả các ứng dụng trên thiết bị. Để làm vậy, hãy gọi một ý định bao gồm thao tác theo ý định Tài nguyên khácĐể biết thêm thông tin về cách lưu tệp vào bộ nhớ của thiết bị, hãy tham khảo các tài nguyên sau. Video
|