私の 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
ますか?
理解できるといいのですが、よろしくお願いします!