0

我有一个 Service n UI 类,Service 类有 mediaplayer n onCompletion 方法来查看已完成歌曲的跟踪。
那么问题是我如何从服务类通知 UI 歌曲的完成,以便它根据现在要播放的新歌曲更改其详细信息?
.

4

1 回答 1

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 或简单地在 Activity 中调用静态方法,只要确保使用 post(),因为在不同线程中修改视图会导致应用程序崩溃。

于 2013-09-15T11:23:42.880 回答