我已经看到了很多与此主题有关的问题,但是我对任何答案都不满意。
我希望它具有一个class ConnectionController implements Runnable
,它负责向服务器打开连接,向其读取和写入消息,并且必须自应用程序开始到结束都必须实例化。
我有一个class MainActivity extends from Activity
,onCreate它将实例化一个ConnectionController对象。
该connectionController必须更改MainActivity上的某些字段(并最终更改其他活动中的字段),例如状态连接ImageView,甚至接收到消息TextView。
因为connectionController是一个线程,所以我无法访问元素(CalledFromWrongThreadException(仅创建视图层次结构的原始线程可以触摸其视图)。
您建议使用什么?我看到了带有异步任务,处理程序,myUIRunnable的解决方案,但我不了解针对这种情况的最佳解决方案是什么。
提前致谢。
最佳答案
该connectionController必须更改MainActivity上的某些字段(并最终更改其他活动中的字段),例如状态连接ImageView,甚至接收到消息TextView。
不,不是的。它需要安排那些事情被改变。由于出于某种原因您选择使“控制器”成为线程,因此控制器无法更改这些UI元素本身。
您建议使用什么?
在post()
上使用View
。或者,在runOnUiThread()
上使用Activity
。或者,使用Handler
。