使用Handler在线程之间传递消息所遇到的问题及解决方法

来源:互联网 发布:mac中毒会有什么反应 编辑:程序博客网 时间:2024/06/07 04:52

目的是这样的:线程A实现录像功能,所要进行的操作是网络连接与录像存储,并且在录像过程中需要与主线程,即UI线程进行交互,然后线程A根据UI线程中的响应结果进行下一步处理。简单来说就是主线程与子线程相互传递信息,并且主线程会通过所传递的信息控制子线程的操作。

相互之间传递信息不是难点,难点是主线程要通过传递信息来控制子线程的操作,我们都知道,子线程的执行不依赖于主线程,当我们把子线程中的状态信息传递给主线程之后,在主线程根据子线程的状态信息进行判断时,子线程仍会继续执行,但我们要实现的是当主线程判断结束后,子线程才能执行随后的操作。

刚开始我采用方法是让子线程处于不断循环状态,直到主线程做完响应后再将布尔变量赋为false,从而使得子线程根据响应结果继续执行。但这样做结果是行不通的,原因就在于子线程处理主线程所传递信息的操作会由于之前子线程在某一点不断循环而无法进行,这也说明重写的Handler类中的handleMessage方法也是在子线程中执行的。于是就重新调整了思路,当子线程发送需要主线程定夺(其实就是需要用户定夺)的Message后,就结束当前线程,然后再根据主线程的响应重新开启线程进行处理,问题解决。但这个过程导致不得不存储许多状态信息,用来重启线程时使用。

原创粉丝点击