Как использовать намерение для обновления активности?

У меня есть служба, которая загружает файл. Когда загрузка будет завершена, я хотел бы обновить список «Загруженные файлы» в моем Activity, но только если Activity запущен. Я не хочу, чтобы Activity запускался, если он еще не запущен.

Я надеялся, что смогу сделать это, создав новый Intent с каким-нибудь специальным флагом.

Кто-нибудь знает, как я могу этого добиться? Может быть, крошечный пример кода?


person Vidar Vestnes    schedule 24.08.2009    source источник


Ответы (2)


Вы можете создать новый экземпляр 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);

Я надеюсь, что это поможет вам, не стесняйтесь спрашивать, если что-то неясно.

person Dimitar Dimitrov    schedule 24.08.2009
comment
Это очень хороший способ общения. Но что делать, если результаты были доставлены, а активность была в состоянии паузы? Так что после активности onResume можно долго ждать результатов. И данные не будут получены, потому что данные были пропущены. - person Anton-M; 21.04.2013

Хороший способ сделать это — привязать активность «Загруженные файлы» к службе. При привязке службы в функции onServiceConnected зарегистрируйте обратный вызов Binder. Затем, когда у вас появляются новые данные, служба просто вызывает этот обратный вызов. Если действие не выполняется, список обратных вызовов на стороне службы будет пустым, поэтому он не будет информировать вашу активность.

В качестве примера этого подхода взгляните на RemoteService.java в Android SDK:

образцы\ApiDemos\src\com\example\android\apis\app\

person MannyNS    schedule 25.08.2009
comment
В чем будет преимущество этого по сравнению с обменом сообщениями о намерениях, как предложил Димитар Димитров? Спасибо - person urSus; 11.03.2013