0

私は Service n UI クラスを持っています Service クラスには mediaplayer n onCompletion メソッドがあり、完成した曲を追跡します。
問題は、Service クラスから曲の完了を 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();

または、いつでもインテントを使用するか、単にアクティビティ内で静的メソッドを呼び出すことができます。別のスレッドでビューを変更するとアプリがクラッシュするため、必ず post() を使用してください。

于 2013-09-15T11:23:42.880 に答える