android在一个单独的线程中定义监听器

时间:2013-11-04 22:20:07

标签: java android multithreading android-intent

我正在尝试在我的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”。知道如何解决这个问题吗?

1 个答案:

答案 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。