Возможно, спрашивающий уже давно прошел мимо этого, но в случае, если кто-то другой ищет это ...
Есть еще один способ справиться с этим, который, я думаю, может быть самым простым.
Добавьте BroadcastReceiver
к вашей активности. Зарегистрируйте его, чтобы получить пользовательское намерение в onResume
и отмените регистрацию в onPause
. Затем отправьте это намерение из вашей службы, если вы хотите отправить обновления своего статуса или что у вас есть.
Удостоверьтесь, что вы не будете несчастны, если какое-то другое приложение прислушается к вашему Intent
(может кто-нибудь сделать что-нибудь злое?), Но кроме этого, вы должны быть в порядке.
Образец кода был запрошен:
На моем служении у меня есть это:
// Do stuff that alters the content of my local SQLite Database
sendBroadcast(new Intent(RefreshTask.REFRESH_DATA_INTENT));
(RefreshTask.REFRESH_DATA_INTENT
- это просто постоянная строка.)
В своей деятельности по прослушиванию я определяю BroadcastReceiver
:
private class DataUpdateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(RefreshTask.REFRESH_DATA_INTENT)) {
// Do stuff - maybe update my view based on the changed DB contents
}
}
}
Я объявляю мой получатель на вершине класса:
private DataUpdateReceiver dataUpdateReceiver;
Я переопределяю onResume
, чтобы добавить это:
if (dataUpdateReceiver == null) dataUpdateReceiver = new DataUpdateReceiver();
IntentFilter intentFilter = new IntentFilter(RefreshTask.REFRESH_DATA_INTENT);
registerReceiver(dataUpdateReceiver, intentFilter);
И я переопределяю onPause
, чтобы добавить:
if (dataUpdateReceiver != null) unregisterReceiver(dataUpdateReceiver);
Теперь я слушаю, как моя служба говорит: «Эй, иди обновляйся». Я мог бы передавать данные в Intent
вместо обновления таблиц базы данных и затем возвращаться, чтобы найти изменения в моей деятельности, но, поскольку я хочу, чтобы изменения сохранялись в любом случае, имеет смысл передавать данные через БД.