Сохранить данные в приемнике вещания - PullRequest
1 голос
/ 02 июля 2010

Я бы хотел сохранить хеш-таблицу в приемнике вещания. Если я понимаю жизненный цикл BroadcastReceiver в настоящее время, он может быть убит, стирая мои членские переменные. Какова была бы идеальная стратегия для извлечения хеш-таблицы из предыдущего запуска onReceive в BroadcastReceiver?

Ответы [ 5 ]

13 голосов
/ 02 июля 2010

Существует два способа использования BroadcastReceiver, и вы не указали, какой вы используете.

Один для получателя, зарегистрированного другим компонентом, например Activity, через registerReceiver().Этот получатель будет жить до тех пор, пока он зарегистрирован, поэтому его данные могут длиться более одного onReceive() вызова.Компонент, который зарегистрировал получателя, будет отвечать за сохранение данных.

Другой - зарегистрировать получателя в манифесте.Те, в соответствии с цитатой в ответе cdonner, исчезнут после одного onReceive() вызова.Ваш получатель должен будет сохранить свои данные в базу данных, плоский файл или что-то еще.

2 голосов
/ 19 декабря 2011

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

static HashMap<String> hashMap;
static {
    hashMap.put("key1","string1");
}

Тот же прием можно использовать для регистрации обработчика для получения обратной связи от получателя.

0 голосов
/ 12 января 2011

переводит данные в класс Object и затем преобразует их в требуемый объект класса: -)


public void onReceive(Context context, Intent intent) {
HashMap map = (HashMap) bundle.get("KEY");
Object[] data=map.get(mapKey);
XXXX xxxx=data[0];
//...
}
0 голосов
/ 02 июля 2010

Лучшей стратегией будет использование базы данных для хранения ваших данных в таблице вместо любого типа в карте памяти.

Таким образом, не будет иметь значения, если пользователь выключит, а затем выключитснова включите телефон, ваши данные из предыдущих звонков по-прежнему будут доступны.

0 голосов
/ 02 июля 2010

Из справочника Android:

Объект BroadcastReceiver действителен только на время вызова onReceive (Context, Intent). Как только ваш код возвращается из этой функции, система считает, что объект завершен и больше не активен.

Не похоже на то, что вы хотите сделать, будет работать. Об этом должен позаботиться Actitivy, который регистрирует получателя, или вы можете сохранить свою хэш-таблицу в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...