Ответ 1
Используйте асинхронную задачу в своей службе, чтобы обрабатывать работу, которая вам нужна в фоновом режиме. Когда вам нужно обновить интерфейс, используйте метод progressUpdate async-задачи, чтобы отправить трансляцию обратно в любую интересующую вас активность.
Псевдо пример.
активность
onCreate → startService и создайте новый широковещательный приемник. Не забудьте переопределить метод onReceive и проверить конкретные намерения.
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(yourActionType)) {
//do work here
}
}
};
onResume → регистрироваться как широковещательный приемник
IntentFilter filter = new IntentFilter();
filter.addAction(yourActionType);
mLocalBroadcastManager.registerReceiver(broadcastReceiver, filter);
Сервис
onCreate → создать диспетчер передачи.
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
onStartCommand → при необходимости создать и выполнить новую задачу async. (onStart можно вызвать несколько раз)
Задача Async
doInBackground → Запустите любую нужную фоновую задачу. В этом случае играет музыка. Выполнять периодические вызовы publishProgress
onProgressUpdate → sendBroadcast, указывающий обновленный статус
Intent broadcastIntent = new Intent(yourActionType);
broadcastIntent.putExtra(whateverExtraData you need to pass back);
mLocalBroadcastManager.sendBroadcast(broadcastIntent);
onPostExecute → завершение отправки sendBroadcast задачи