【问题标题】:How to stop a blocked handler thread?如何停止阻塞的处理程序线程?
【发布时间】:2016-02-24 18:11:56
【问题描述】:

我已通过aidl 接口将活动绑定到远程服务。各种其他活动也与之相关。一段时间后,呼叫被阻止。当我打开该特定活动时,它会启动一个处理程序线程,并通过aidl 接口调用一些远程方法。但是它们被阻塞了,所以线程也被阻塞了。在 onDestroy() 方法中,我正在尝试执行 handlerthread.quit(),但线程没有停止。因此,每次我启动活动线程时都会启动但不会在破坏活动时停止。

我的问题是如何停止处于阻塞状态的处理程序线程?

【问题讨论】:

  • 您的aidl 接口需要有“oneway”非阻塞方法调用,这些方法调用会立即返回 - 在您的“oneway”方法调用的构造函数中为您的处理程序定义一个“回调”。
  • 你试过 thread.interrupt() 吗?
  • @user3549047 我试过打断。但是线程并没有停止。
  • 它似乎在“onTransact”中被阻塞,等待远程绑定线程响应。

标签: android aidl android-handlerthread


【解决方案1】:

您的aidl 接口可能是双向的。 尝试将它们设为oneway,这将使它们无阻塞。

另外,如果您的要求不是让它们继续运行,请查看this link,它解释了如何停止处理程序线程。

【讨论】:

  • 我试过这个。 mBTHandler.removeCallbacksAndMessages(null); mBTHandler = null; BTWorkerThread.quit(); if(BTWorkerThread.isAlive()) BTWorkerThread.interrupt(); BTWorkerThread = null;但它没有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2014-05-25
  • 2019-01-26
  • 2016-03-05
  • 2013-07-05
  • 1970-01-01
相关资源
最近更新 更多