私の Android アプリケーションには、データをダウンロードして解析するObservable Dataメソッドを含むクラスがあります。download()これが完了すると、s に通知しObserverます。
さらに、 と がありActivityますService。は、を使用してメソッドを非同期Activityで呼び出します。download()AsyncTask
はService、データをさらに処理するために常に更新をリッスンする必要があります。これは、UI スレッドでは発生しません。この小さなServiceクラスを作成しました:
public class MyService extends Service {
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
new MyWorkerThread().start();
}
private class MyWorkerThread extends Thread implements Observer{
@Override
public void run() {
observeData();
}
private void observeData(){
Data.getInstance().addObserver(this);
}
@Override
public void update(Observable observable, Object data) {
// In what thread does the code placed here run?
}
}
}
さて、私の質問: クラスのdownload()メソッドがDataその s を通知するとき、メソッドはObserverどのスレッドでupdate()実行されますか? AsyncTaskこれはによって作成されたのスレッドにあり、サービスが完了するまでActivityコードがメソッドを通過するのを防ぎますか? onPostExecute()もしそうなら、私は自分MyServiceのを作成し、毎回Observer新しいものを作成したほうがよいでしょうか? MyWorkerThreadまたは、コードは独自のスレッドで実行されMyWorkerThreadますか?
理解できるといいのですが、よろしくお願いします!