在您的服务中使用异步任务来处理您需要在后台完成的工作。当您需要更新 UI 时,请使用异步任务的 progressUpdate 方法将广播发送回任何感兴趣的活动。
伪例子。
活动
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 -> 如有必要,创建并执行一个新的异步任务。(onStart 可以被多次调用)
异步任务
doInBackground -> 启动您需要的任何后台任务。在这种情况下播放音乐。定期调用 publishProgress
onProgressUpdate -> sendBroadcast 指示更新状态
Intent broadcastIntent = new Intent(yourActionType);
broadcastIntent.putExtra(whateverExtraData you need to pass back);
mLocalBroadcastManager.sendBroadcast(broadcastIntent);
onPostExecute -> sendBroadcast 指示任务结束