Хороший путь к данным кэша во время жизненного цикла приложения Android?

сохраняя мой вопрос коротким, я создал приложение с 3 операциями, где - список категорий, B - список объектов, C - единственный объект. Данные, отображенные в B и C, анализируются от XML онлайн. Но, если бы я прохожу-> B1-> C, затем обратно к A и затем обратно к B1, я хотел бы кэшировать его данные где-нибудь, таким образом, я не должен буду запрашивать XML снова.

Я плохо знаком с Android и программированием Java, я погуглил много и все еще не могу найти (или просто не имейте идеи, где посмотреть), способ сделать то, что я хочу.

Был бы, храня все полученные данные в основном виде деятельности (HashMaps? ContentProviders?) и затем передающий B и C (если они получают тот же запрос, который был прежде) быть хорошей идеей?

16
задан Hugo Josefson 26 April 2011 в 16:04
поделиться

3 ответа

Простым и быстрым способом кэширования информации или отслеживания состояния приложения является расширение Application, как описано в этой статье.

В этой статье забыли добавить, что вы должны установить свой класс CustomApplication в манифесте, например:

<application [...] android:name="CustomApplication">

В своих проектах я придерживаюсь стиля singleton через getInstance.

Больше ресурсов: этот ответ, Глобальные переменные в приложениях Android и эта статья в блоге.

13
ответ дан 30 November 2019 в 22:55
поделиться

Вы можете использовать хранилище данных, как описано в Справочнике по Android здесь http://developer.android.com/guide/topics/data/data-storage.html

-1
ответ дан 30 November 2019 в 22:55
поделиться

Если вы хотите создать что-то вроде кэша в памяти, подумайте об использовании Map с SoftReferences. SoftReferences - это своего рода ссылки, которые обычно сохраняют ваши данные на некоторое время, но не предотвращают их сборку в мусор.

Память на мобильном телефоне ограничена, поэтому хранить все в памяти может быть нецелесообразно. В этом случае лучше сохранять кэши на вторичном накопителе устройства.

Посмотрите на MapMaker из Коллекций Google, который позволяет удобно создавать двухуровневый кэш. Подумайте о следующем:

/** Function that attempts to load data from a slower medium */
Function<String, String> loadFunction = new Function<String, String>() {
    @Override
    public String apply(String key) {
        // maybe check out from a slower cache, say hard disk
        // if not available, retrieve from the internet
        return result;
    }
};

/** Thread-safe memory cache. If multiple threads are querying
*   data for one SAME key, only one of them will do further work.
*   The other threads will wait. */
Map<String, String> memCache = new MapMaker()
                                .concurrentLevel(4)
                                .softValues()
                                .makeComputingMap(loadFunction);

О кэше на вторичном хранилище устройства смотрите Context.getCacheDir(). Если вы неаккуратны, как я, просто оставьте все там и надейтесь, что система очистит все за вас, когда ей понадобится больше места :P

2
ответ дан 30 November 2019 в 22:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: