Android服务如何更新启动它的活动的UI?
我是Android编程新手,所以在选择最佳应用程序设计方式方面,我面临一些普遍问题 我想做的基本上是一个媒体播放器。我希望媒体播放器在服务上运行,因为我希望它在活动未显示时也能播放 我的问题是,如何根据服务工作流程更新活动的UI(例如,歌曲更改,我希望显示其名称) 我想我可以使用本地广播管理器将意图从我的服务发送到我的活动,并调用UI更新(这似乎正确吗?) 但是。。。我希望我的服务在播放音乐时做一些事情(比如查询/更新数据库)。 出于这个原因,我考虑在不同的进程(或线程?)上运行服务 所以。。我想,在另一个进程上运行服务时,我将无法使用本地广播管理器(是这样吗?) 我希望我能解释我的疑问是什么。。。有人能帮忙吗Android服务如何更新启动它的活动的UI?,android,android-intent,android-activity,android-service,Android,Android Intent,Android Activity,Android Service,我是Android编程新手,所以在选择最佳应用程序设计方式方面,我面临一些普遍问题 我想做的基本上是一个媒体播放器。我希望媒体播放器在服务上运行,因为我希望它在活动未显示时也能播放 我的问题是,如何根据服务工作流程更新活动的UI(例如,歌曲更改,我希望显示其名称) 我想我可以使用本地广播管理器将意图从我的服务发送到我的活动,并调用UI更新(这似乎正确吗?) 但是。。。我希望我的服务在播放音乐时做一些事情(比如查询/更新数据库)。 出于这个原因,我考虑在不同的进程(或线程?)上运行服务 所以。。我
非常感谢 在您的服务中使用异步任务来处理您需要在后台完成的工作。当需要更新UI时,请使用async task的progressUpdate方法将广播发送回任何感兴趣的活动 伪例子 活动 onCreate->startService并创建新的broadcastReceiver。确保覆盖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表示任务结束非常感谢。但是广播信息呢?它们不适合在本地使用吗?@super我编辑了我的答案,加入了一个本地广播使用的例子。如果您的目标是旧api verison,请确保库中包含android-support-v4.jar。“AsyncTasks最好用于短操作(最多几秒钟)。[…]”-