我正在开发一项服务,它扩展了 Service 类并使用单独的线程来处理传入的消息,因此,我的 onCreate 方法中有以下内容
thread = new HandlerThread("MYSERVICE-THREAD",
Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
serviceLooper = thread.getLooper();
serviceHandler = new ServiceHandler(mServiceLooper);
在这个线程中,我创建了一个 LocationManager 并将其设置为监听位置变化。不过,我有点担心线程的生命周期。这就是为什么:
如果我不从服务的 onDestroy 方法中的位置管理器中删除位置侦听器,并通过 telnet 强制更新位置,那么一切正常。我发现这很奇怪,并尝试在服务的 onDestroy 方法中使用 thread.quit() 显式结束线程。所以,现在当从 telnet 进行位置更新时,我收到了我一开始就期待的警告。处理程序正在死线程上调用处理程序。
从位置管理器中删除位置侦听器显然可以解决这个问题,但是,这似乎暗示我,如果我不明确关闭线程,则线程将在服务被销毁后继续运行。这个对吗?在 developer.android.com 上的示例中,他们没有明确关闭他们的线程,所以我认为 VM 在这种情况下会处理它。