我正在尝试在我的android应用程序中的单独线程中定义一个侦听器,但是,线程在此之前退出并且不等待调用回调函数。
以下是代码段:
new Thread(new Runnable() {
public void run() {
ServiceConnection conn = new ServiceConnection() {
public void OnServiceConnected(ComponentName name, IBinder service) {
obj = <AIDL interface>.Stub.asInterface(service);
}
public void onServiceDisconnected(ComponentName name) {
obj = null;
}
Intent intent = new Intent("<service name>");
context.startService(intent);
boolean status = context.bindService(intent, conn, Context.BIND_AUTO_CREATE);
}).start();
现在,当从主线程开始,我启动此线程并等待onServiceConnected()发生,它会永远等待并且永远不会被调用。我还检查了这个线程的状态,它说“TERMINATED”。知道如何解决这个问题吗?
答案 0 :(得分:0)
您需要重新考虑应用程序的设计。有些问题你应该知道答案:
您是否需要与服务进行双向互动,还是只需向服务发送“请求”?
服务中采取的操作是否足够快,可以在UI线程中完成,还是需要在单独的线程中运行?
很可能您可以通过使用StartService(Intent)发送请求来使服务成为IntentService并与之交互,而无需根据服务进行绑定,但是如果没有上述问题的答案,则很难说清楚。
编辑:
在run方法中,在绑定到服务之前将m_stopping(一个新的成员变量)设置为false。
发出绑定请求后:
while(!m_stopping)
{
do_some useful work here (otherwise, why have a thread?)
This may include calling unbindService() when you are done.
}
并且在ServiceConnection :: onServiceDisconnected(component)方法的实现中将m_stopping设置为false。