1

我有一个服务,在启动时会启动一个线程,该线程应该是服务的“主线程”。该服务绑定到其他两个服务,这是我正在使用的库的一部分。在这个线程中,我想处理从绑定的服务发送到服务的消息(因为这是绑定的工作方式......对吗?)。绑定进展顺利(返回 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