2013-06-11 2 views
1

В библиотеке Android, которую я пишу, у меня есть очередь, в которой элементы постоянно находятся в очереди и удалены. Требуемая спецификация заключается в том, что никакие элементы в очереди не теряются. Итак, если приложение закрывается, я должен каким-то образом сохранить очередь.Можно ли сохранить базу данных прямо перед закрытием приложения Android?

У меня есть два варианта:

1) В идеале, я мог бы спасти очереди в SQLite базы данных, когда приложение закрывается. Однако я не знаю, как это обнаружить, или даже если это возможно. Таким образом, я могу перезагрузить элементы очереди, которые в следующий раз при открытии приложения никогда не были возвращены в очередь. Если кто-то может сказать мне, как обнаружить приложение рядом с библиотекой (а не Activity), было бы очень полезно.

2) Если это невозможно, я могу написать очередь прямо в базу данных для каждой вставки и удаления. Однако это ужасно неэффективно и слишком медленно для моей библиотеки.

Каков наилучший способ справиться с этой проблемой?

ответ

3

Итак, если приложение закрывается, я должен как-то сохранить очередь.

Обновить постоянное хранилище, когда записи добавляются в очередь. Например, Square's Tape предлагает постоянную реализацию очереди.

Однако я не уверен, как это обнаружить, или даже если это возможно.

Невозможно. Самое близкое, что Android должен «закрыть приложение», это когда процесс завершается, и об этом заранее не сообщается.

Однако это ужасно неэффективно и слишком медленно для моей библиотеки.

Он работает на площади. Their app был загружен миллионы раз и имеет рейтинг 4,5 звезды в Play Маркете, и он использует ленту.

Обратите внимание, что лента AFAIK не пишет в SQLite.

1

Вы не можете обнаружить, когда Application не работает, однако эта работа должна быть выполнена в Service, в которой вы можете переопределить метод onDestroy().

0

В OnPause случае, сделайте следующее

if (isFinishing()) // This tells you the app is closing. 

Только в этом случае сохранить его.

+1

Это не будет работать, если пользователь нажимает HOME (активность не заканчивается), а затем Android завершает процесс через определенный промежуток времени. – CommonsWare

+0

Я считаю, что это касается действий, а не приложений. – bclymer

+0

Я знаю, что это для активности, но если он сохранит данные в базе данных на этом этапе, он будет в безопасности. После OnPause другие события могут не вызываться, и все приложение может быть убито, если оно рассматривается как необходимое операционной системой. – neo

Смежные вопросы