私は Service n UI クラスを持っています Service クラスには mediaplayer n onCompletion メソッドがあり、完成した曲を追跡します。
問題は、Service クラスから曲の完了を UI に通知して、これから再生される新しい曲に応じて詳細を変更する方法です。
.
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 に答える