在你的服务中使用异步任务来处理后台工作。当需要更新UI时,使用异步任务的progressUpdate方法向任何感兴趣的活动发送广播。
伪代码示例。
Activity
onCreate -> startService并创建新的广播接收器。确保重写onReceive方法并测试特定的意图。
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(yourActionType)) {
}
}
};
在onResume()中注册广播接收器
IntentFilter filter = new IntentFilter();
filter.addAction(yourActionType);
mLocalBroadcastManager.registerReceiver(broadcastReceiver, filter);
服务
onCreate -> 创建广播管理器。
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
如果需要,onStartCommand会创建并执行一个新的异步任务。(onStart可能会被调用多次)
异步任务
doInBackground -> 启动所需的任何后台任务。在这种情况下是播放音乐。
定期调用publishProgress。
onProgressUpdate -> 发送广播指示更新状态。
Intent broadcastIntent = new Intent(yourActionType);
broadcastIntent.putExtra(whateverExtraData you need to pass back);
mLocalBroadcastManager.sendBroadcast(broadcastIntent);
在onPostExecute方法中发送广播,表示任务已经结束。