この種のビジー待機は、この種の状況を処理するための良い考えではありません。あなたはこのように宣言されたインタフェースを持つことを検討するかもしれません。
public interface MediaResponseListener {
void mediaResponseReceiver(String result);
}
その後は、このようなあなたのMainActivity
でinterface
を実装する必要があります。
public class MainActivity extends Activity implements MediaResponseListener {
// Your onCreate and other function goes here
// Then you need to implement the function of your interface
@Override
public void mediaResponseReceiver(String result) {
// Do something with the result
}
}
は今、あなたはあまりにもあなたのService
クラスでinterface
を宣言し、あなたのMainActivity
からService
を開始しているときinterface
の参照を渡します。したがって、Service
はこのように見えます。
public AudioService extends Service {
// Declare an interface
public MediaResponseListener mMediaResponseListener;
// ... Your code
// When some error occurs or you want to send some information to the launching Activity
mMediaResponseListener.mediaResponseReceiver(result);
}
そして、あなたのActivity
からService
を開始しているときは、Service
にinterface
の参照を渡す必要があります。したがって、あなたのMainActivity
では、このようなことをする必要があります。ここで
private AudioService mAudioService;
mAudioService. mMediaResponseListener = this;
startService();
あなたがビジーウェイトを回避することができ、時間にService
時からの応答を受け取ることができる方法です。
これで、ローカルブロードキャストで既に試したように、この動作は他の多くの方法で実現できます。
Broadcast
がService
から届いたときに呼び出されるActivity
にBroadcastReceiver
と宣言してください。
Here's a nice implementation of how you can send and receive broadcast.
ループを取り除く。 'ProgressDialog'で十分です。放送が受信されたときにそれを単に却下するだけです。 –