開始時に、サービスの「メインスレッド」であるはずのスレッドを起動するサービスがあります。このサービスは、私が使用しているライブラリの一部である他の 2 つのサービスにバインドされています。このスレッドでは、サービスがバインドされているサービスからサービスに送信されるメッセージを処理したいと考えています (これがバインディングでの動作です... ですよね?)。バインディングはうまくいきます (true を返します) が、私の問題は、メッセージをまったく受信できないように見えることです。私のセットアップの説明は次のとおりです。
サービス:
class MyService extends Service {
onCreate(...) {
myServiceApp = new MyServiceApp(this);
}
onStartCommand(...) {
Thread thread = new Thread(myServiceApp);
thread.start();
}
}
メインスレッドクラス:
class MyServiceApp() {
private Service service;
final Handler mHandler = new Handler() {
void handleMessage(Message msg) {
...
}
};
void run() {
boolean as = service.bindService(new Intent(...), ..., Context.BIND_AUTO_CREATE));
boolean ctrl = service.bindService(new Intent(...), ..., Context.BIND_AUTO_CREATE));
Looper.prepare();
while(true) {
...
}
}
}
ここで、このようなハンドラーを宣言できるようにするには、スレッドのメッセージ ループが必要であることがわかっているので、run メソッドで prepare() を呼び出します。また、while ループのターンごとにメッセージ ループを実行する必要があると感じたので、そこに Looper.loop() を追加しましたが、その行でアプリケーションがハングアップしました。
私の質問は、どうすれば問題を解決し、メッセージを希望する場所に配信できるでしょうか? アプリのアーキテクチャが最適でない可能性があることは承知していますので、改善方法についてお気軽にご提案ください。