1

開始時に、サービスの「メインスレッド」であるはずのスレッドを起動するサービスがあります。このサービスは、私が使用しているライブラリの一部である他の 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() を追加しましたが、その行でアプリケーションがハングアップしました。

私の質問は、どうすれば問題を解決し、メッセージを希望する場所に配信できるでしょうか? アプリのアーキテクチャが最適でない可能性があることは承知していますので、改善方法についてお気軽にご提案ください。

4

0 に答える 0