【发布时间】:2013-02-20 07:18:23
【问题描述】:
我一直在查看 HandlerThread 类,因为最初我使用的是简单的线程和处理程序,但在 android 中出现了带有 NetworkOnMainThreadException 的裁剪器。
我似乎无法理解如何将诸如套接字之类的东西引入到 HandlerThread 中,你可以在其中运行阻塞代码。但是你不能用 HandlerThread 做到这一点,因为你不应该覆盖 run,因为那是 looper 所在的地方。
而且我不能通过消息调用 HandlerThread 来开始侦听套接字,因为它会阻塞传递给它的任何其他消息。
那么这个 HandlerThread 类是为非阻塞任务设计的吗?因为我似乎无法理解如何使用这样的线程,所以它可以在套接字上侦听但可以处理请求就像我从主 UI 线程创建普通线程时一样
我可以在普通线程中调用 Looper.prepare() 和 Looper.loop() 在运行中,然后将代码放在这两行之间(通过检查来创建处理程序)但是我遇到了问题与这个新线程通信时,消息不会传递到线程中。
那么我该如何创建线程,这些线程可以使用处理程序相互通信并执行诸如使用套接字之类的任务。
拜托我不是在寻找使用 ASyncTask cmets,我想知道我自己如何使用线程,以便线程可以相互通信
【问题讨论】:
-
我做了一些更多的测试,在一个单独的项目中与andengine。在 OnCreate 中,我使用 onRunUIThread 创建主类处理程序,然后使用 onRunUIThread 再次创建线程。然后如果该线程创建另一个线程,新的内部线程应该调用 looper。它似乎工作正常,所以不知道为什么我会收到 NetworkOnMainThreadException,因为新项目具有相同的目标并且在同一部手机上,这有点令人费解。
标签: java android multithreading sockets looper