我有一个Service n UI类,Service类具有mediaplayer n onCompletion方法,可以看到跟踪已完成的歌曲。
那么问题是我如何通过UI从服务类中通知UI有关歌曲的完成情况,以便根据现在要播放的新歌改变其详细信息?
。
答案 0 :(得分:1)
通过自定义界面使用回调。然后,您将此接口提供给服务,并在需要时调用它。
public interface CallOnComplete
{
public void updateUi();
}
然后,在您创建服务的活动中,为此接口的实例提供您希望服务的工作,并在媒体播放器完成时调用它。 我不确定这会被计算为在UIThread中运行,如果有任何问题,你总是可以使用view.post()来确保它。
//IF YOU HAVE TO UPDATE THE ACTIVITY'S VIEWS
private CallOnComplete callback = new CallOnComplete(){
public void updateUI()
{
viewToModify.post(new Runnable(){
public void run(){
//UPDATE VIEW
}
});
}
};
//ANYTHING ELSE
private CallOnComplete callback = new CallOnComplete(){
public void updateUI()
{
//UPDATE ANYTHING YOU HAVE TO UPDATE
}
};
然后在服务中你可以打电话
mCallback.updateUI();
或者您可以随时使用Intents或只是在活动中调用静态方法,只需确保使用post(),因为在不同的线程中修改视图会使应用程序崩溃。