2012-01-27 3 views
7

내 애플리케이션은 큐와 비슷한 데이터 구조가 필요합니다. 데이터를 넣고 FIFO처럼 데이터를받습니다. 데이터로는 지금은 단순한 문자열을 의미하고 나중에는 더 복잡한 객체를 의미합니다. 중요한 것은 안드로이드가하는 일과 관계없이 큐와 그 내용이 지속적이어야한다는 것입니다. 응용 프로그램이 닫히고 다시 열리거나 안드로이드가 재부팅되는 경우에도 대기열은 응용 프로그램을 닫기 전에 대기 상태와 동일한 상태 여야합니다.안드로이드에서 영구적 인 큐를 실현하는 방법

필자는 큐가 어떤 종류의 저장소를 사용하고 있어야한다고 생각합니다. 장치의 내부 저장소가 바람직합니다. 어쩌면 당신은 이것을 실현하는 방법에 대해 브레인 스토밍을 할 수 있습니다. 대기열이 내 응용 프로그램에서 반드시 실행될 필요는 없으며, 안드로이드에서 가능하다면 (예를 들어 내 응용 프로그램에 비공개) 일종의 밀 결합 배경 서비스 일 수도 있습니다.

답변

7

Sqlite 내부 테이블을 사용하는 것이 좋습니다. Queue 인터페이스를 구현하는 자신의 SqliteQueue을 만들 것입니다. Offer은 테이블에 항목을 추가합니다. Poll은 항목을 반환하고 테이블에서 제거합니다. 보다 복잡한 객체의 경우 GSON을 사용하여 객체를 JSON 문자열로 변환하거나 JSON 문자열을 객체로 변환 할 수 있습니다.

+1

나는 최근에 작업을 위해 작성한 앱에서 스캔 한 바코드의 오프라인 동기화를 처리하는 데이 방법을 사용합니다. 직렬화 가능 클래스를 작성하여 다양한 유형의 여러 데이터 청크를 저장하고이를 데이터베이스에 삽입 할 수도 있습니다. 그것이 데이터베이스에 있기 때문에, 그것은 끈기가 있습니다. 단지 그것을 찾아 다시 꺼내야합니다. 또 다른 옵션은 기본적으로 응용 프로그램 상태를 저장하는 경우 응용 프로그램의 개인 저장소 디렉토리에있는 텍스트 파일에 직렬화 가능 파일로 저장하는 것입니다. 앱 상태에 대한 데이터 일괄 처리를 위해 db 저장소보다 쉽습니다. –

+0

오, 우연의 일치.내 의도는 거의 동일합니다. 예를 들어 장치가 서버에 데이터를 전송할 수없는 신호가없는 영역에있는 경우와 같이 바코드와 비슷한 것을 스캔하여 잠시 동안 장치에 보관합니다. 이것도 내부 저장소의 파일에서 안정적으로 작동 할 수 있다고 생각하십니까? 아니면 sqlite 데이터베이스가 훨씬 더 나은 해결책입니까? – ceran

+1

데이터베이스. 그런 다음 변경 사항이있을 때마다 파일을 쓰고 다시 쓸 필요가 없습니다. 파일을 파싱하는 것에 대해 걱정할 필요가 없습니다. Sqlite 도우미 클래스를 사용하는 것도 어렵지 않습니다. – Frohnzie

1

Java API에는 그러한 데이터 구조가 없지만 Queue을 구현하는 데는 문제가 없어야합니다. Android의 데이터 저장 메커니즘에 대한 설명이 포함 된 this 문서를 살펴보세요. SharedPreferences을 사용하는 것이 좋지만 신청서에 가장 적합한 것을 선택할 수 있습니다. Queue 인터페이스를 구현하는 Java 컬렉션 중 하나를 확장하고 Android의 저장 방법을 사용하여 지속성 메커니즘을 추가 할 수 있습니다. 희망이 도움이됩니다.

+0

된 SharedPreferences 우선, 네트워크 선택, 같은

및 제공하는 많은 기능 (더블 INT 즉, 문자열) 원시적 인 데이터 형식이다. – Frohnzie

+0

@Frohnzie, Java의 모든 컬렉션에는 문자열 표현이 있습니다. – Egor

8

5 월 squareup은 좋은 선택입니다.

QueueFile은 파일 기반의 번개가 빠른 고속 FIFO입니다. 인스턴스에서 추가 및 제거는 O (1) 연산이며 원자 적입니다. 쓰기는 동기식입니다. 작업이 반환되기 전에 데이터가 디스크에 기록됩니다. 기본 파일은 프로세스 및 시스템 충돌에서 생존 할 수 있도록 구조화되어 있으며 변경 변경 중에 I/O 예외가 발생하면 변경이 중단됩니다.

3

이 경로에서 좋은 라이브러리입니다 ". 쉽게 작업 (작업)을 예약 할 작업 대기열 구체적으로 안드로이드 용으로 작성 UX 및 응용 프로그램의 안정성을 향상, 백그라운드에서 실행"

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

은 콜백 등

관련 문제