我有一个服务,在启动时会启动一个线程,该线程应该是服务的“主线程”。该服务绑定到其他两个服务,这是我正在使用的库的一部分。在这个线程中,我想处理从绑定的服务发送到服务的消息(因为这是绑定的工作方式......对吗?)。绑定进展顺利(返回 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() ,但这只是让应用程序挂在该行上。
所以我的问题是,我如何解决问题并将消息传递到我想要的地方?我知道我的应用程序架构可能不是最佳的,因此请随时就如何改进它提出建议。