いくつかの可能性があります:
Service は brodcast(sendBroadcast) を送信できます。あなたのアクティビティは、サービスに実装された broacastReceiver を登録するだけです。そのようなもの: あなたのサービス:
Intent intent = new Intent();
intent.setAction("youAction");
intent.putExtra("url",uri.toString());
sendBroadcast(intent);
アプリケーションの AndroidManifest で:
<receiver android:name="MyReceiver" >
<intent-filter>
<action android:name="yourAction" />
</intent-filter>
</receiver>
あなたの活動:
private class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
String url = arg1.getExtras().getString("url");
//Here you can update your UI
}
このリンクはあなたを助けることができます: http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html
2 番目の方法は、サービスにリスナーを登録し、サービスでそのリスナーに通知することです。
あなたのサービスで:
void onSomethingHappened()
{
activityListener.notifyProgressBar();
}
void subscribe(YourInterface listener)
{
actibityListener = listener;
}
In you activity, after start you service:
service.subscribe(this);
ただし、より良い解決策を得るには、サービスの実装 (タイプ) を考慮する必要があります。
AndroidServiceに関するこのリンクは役に立ちます。
ただし、もう 1 つの重要な点は、選択は async task の実装方法に依存するということです。preExucute、doInBackground、onProgressUpdate、および postExecute の各メソッドで何を行うかによって異なります。
AndroidUIThread の外部で発生したイベントから UI を更新することに注意する必要があるため、UI を直接更新しようとすると問題が発生します。この問題を解決するには、アクティビティのメソッドrunOnUiThreadを使用するか、 Handlerを使用できます。