Как использовать намерение для обновления активности?
-
19-09-2019 - |
Вопрос
У меня есть служба, которая загружает файл.Когда загрузка будет завершена, я хотел бы обновить список «Загруженные файлы» в своем личном кабинете. Activity
, но только в том случае, если Activity
бежит.я не хочу Activity
для запуска, если он еще не запущен.
Я надеялся, что смогу сделать это, создав новый Intent
с каким-то особым флагом.
Кто-нибудь знает, как я могу этого добиться?Может быть, небольшой пример кода?
Решение
Вы можете создать новый экземпляр BroadcastReceiver и сделать что-то в этом роде в методе onResume() вашего Activity:
registerReceiver(myReceiver, new IntentFilter(DownloadService.ACTION_FILE_DOWNLOADED));
После этого переопределите метод onReceive() myReceiver, чтобы вызвать функцию, которая обновляет нужный вам компонент:
@Override
public void onReceive(Context context, Intent intent) {
...
updateViewWithData(service.getNewFileData());
...
}
В методе onPause() вашего Activity просто отмените регистрацию получателя:
unregisterReceiver(myReceiver);
Я надеюсь, что это вам поможет, не стесняйтесь спрашивать, если что-то неясно.
Другие советы
Хороший способ сделать это — привязать активность «Загруженные файлы» к службе.Когда вы привязываете службу, в функции onServiceConnected зарегистрируйте обратный вызов Binder.Затем, когда у вас появляются новые данные, сервис просто вызывает этот обратный вызов.Если действие не выполняется, список обратных вызовов на стороне службы будет пуст, поэтому он не будет информировать о вашей активности.
В качестве примера такого подхода взгляните на RemoteService.java в Android SDK:
образцы\ApiDemos\src\com\example\android\apis\app\