2012-01-27 28 views
7

Ứng dụng của tôi cần cấu trúc dữ liệu tương tự như hàng đợi: đặt dữ liệu vào đó, nhận dữ liệu từ đó, như kiểu FIFO. Với dữ liệu tôi có nghĩa là các chuỗi đơn giản bây giờ, sau này có lẽ là các đối tượng phức tạp hơn. Vấn đề là hàng đợi và nội dung của nó phải liên tục, bất kể Android đang làm gì. Nếu ứng dụng bị đóng và mở lại (hoặc thậm chí khởi động lại Android), hàng đợi phải có cùng trạng thái và dữ liệu trước khi ứng dụng bị đóng.Cách nhận hàng đợi liên tục trên Android

Tôi cho rằng hàng đợi phải sử dụng một số loại bộ nhớ dưới mui xe, tốt nhất là bộ nhớ trong của thiết bị. Có lẽ bạn có thể làm một số động não làm thế nào để nhận ra điều này. Hàng đợi không nhất thiết phải chạy trong ứng dụng của tôi, nó cũng có thể là một loại dịch vụ nền được ghép đôi yếu nếu có thể trong Android (nhưng riêng tư cho ứng dụng của tôi).

Trả lời

7

Tôi khuyên bạn nên sử dụng bảng bên trong Sqlite. Tôi sẽ tự tạo SqliteQueue của riêng mình để triển khai giao diện Hàng đợi. Offer sẽ thêm mục nhập vào bảng. Poll sẽ trả về một mục nhập và xóa nó khỏi bảng. Đối với các đối tượng phức tạp hơn, bạn có thể sử dụng GSON để chuyển đổi đối tượng thành chuỗi JSON hoặc chuyển đổi chuỗi JSON thành đối tượng.

+1

Tôi sử dụng phương pháp này để xử lý mã vạch được quét của đồng bộ hóa ngoại tuyến trong một ứng dụng mà gần đây tôi đã viết cho công việc. Bạn thậm chí có thể tạo ra một lớp serializable để lưu trữ nhiều khối dữ liệu của các loại khác nhau, và chèn nó vào cơ sở dữ liệu. Vì nó nằm trong cơ sở dữ liệu, nó liên tục, bạn chỉ cần tìm nó và kéo nó ra. Một tùy chọn khác là lưu trữ nó như là một serializable trong một tập tin văn bản trong thư mục lưu trữ riêng cho các ứng dụng nếu bạn về cơ bản chỉ nói chuyện lưu trữ trạng thái ứng dụng. Nó dễ dàng hơn lưu trữ db cho một loạt dữ liệu duy nhất cho trạng thái ứng dụng. –

+0

Ồ thật trùng hợp.Ý định của tôi gần như giống nhau - quét mã vạch và những thứ tương tự và giữ chúng trên thiết bị trong một thời gian, ví dụ nếu thiết bị ở trong vùng không có tín hiệu nơi nó không thể gửi dữ liệu đến máy chủ. Bạn có nghĩ rằng điều này cũng có thể làm việc đáng tin cậy với các tập tin trong lưu trữ nội bộ hoặc là cơ sở dữ liệu sqlite một giải pháp tốt hơn nhiều ở đây? – ceran

+1

Cơ sở dữ liệu. Sau đó, bạn không phải viết và viết lại tệp mỗi khi bạn có thay đổi. Bạn không phải lo lắng về việc phân tích cú pháp tệp. Sử dụng các lớp trợ giúp Sqlite cũng không khó. – Frohnzie

1

Tôi không có cấu trúc dữ liệu như vậy trong Java API, nhưng sẽ không có vấn đề gì khi triển khai loại Queue của riêng bạn. Hãy xem tài liệu this, chứa tài liệu mô tả cơ chế Lưu trữ dữ liệu trong Android. Tôi khuyên bạn nên sử dụng SharedPreferences, nhưng bạn có thể chọn những gì phù hợp nhất với ứng dụng của mình. Bạn có thể mở rộng một trong các bộ sưu tập của Java thực hiện giao diện Queue và thêm các cơ chế kiên trì của bạn bằng cách sử dụng các phương pháp lưu trữ của Android. Hi vọng điêu nay co ich.

+0

SharedPreferences là dành cho các loại dữ liệu nguyên thủy (tức là int, double, String). – Frohnzie

+0

@Frohnzie, Mỗi bộ sưu tập trong Java có biểu diễn Chuỗi của nó. – Egor

8

May squareup là lựa chọn tốt.

QueueFile là một FIFO nhanh, giao dịch, dựa trên tệp cực nhanh. Phép cộng và loại bỏ từ một thể hiện là một phép toán O (1) và là nguyên tử. Viết là đồng bộ; dữ liệu sẽ được ghi vào đĩa trước khi một thao tác trả về. Các tập tin cơ bản được cấu trúc để tồn tại quá trình và thậm chí cả hệ thống treo và nếu một ngoại lệ I/O được ném trong một thay đổi đột biến, thay đổi bị hủy bỏ.

3

Đây là thư viện tốt từ Đường dẫn:

https://github.com/path/android-priority-jobqueue

"Một Queue Job được viết riêng cho Android để dễ dàng sắp xếp công việc (nhiệm vụ) chạy ở chế độ nền, cải thiện UX và ổn định ứng dụng."

Và cung cấp nhiều tính năng như ưu tiên, kiểm tra mạng, gọi lại, v.v.

Các vấn đề liên quan