【问题标题】:Android CalledFromWrongThreadExceptionAndroid CalledFromWrongThreadException
【发布时间】:2012-03-22 05:35:41
【问题描述】:

我已经看到很多关于这个主题的问题,但我真的对任何答案都不满意。

我希望它有一个 class ConnectionController implements Runnable 负责打开与服务器的连接,读取和写入消息,并且必须从应用程序开始到结束进行实例化。

我有一个class MainActivity extends from Activity,onCreate 它将实例化一个 ConnectionController 对象。

connectionController 必须更改 MainActivity 上的某些字段(最终在另一个活动中),例如状态连接 ImageView,甚至接收到消息 TextView。

因为 connectionController 是一个线程,我无法访问元素(CalledFromWrongThreadException(只有创建视图层次结构的原始线程才能访问其视图)。

你推荐使用什么?我看到了异步任务、处理程序、myUIRunnable 的解决方案,但我不明白什么是这种情况的最佳解决方案。

提前致谢。

【问题讨论】:

    标签: android multithreading exception status


    【解决方案1】:

    connectionController 必须更改 MainActivity 上的某些字段(最终在另一个活动中),例如状态连接 ImageView,甚至接收到消息 TextView。

    不,它没有。它需要安排来改变这些东西。由于您出于某种原因选择将“控制器”设为线程,因此控制器本身无法更改这些 UI 元素。

    你推荐使用什么?

    View 上使用post()。或者,在Activity 上使用runOnUiThread()。或者,使用Handler

    【讨论】:

    • 我的问题是最好使用什么。无论如何,我选择了处理程序。谢谢
    • @Edu:没有“最好”,至少在摘要中是这样。其中任何一个都是同样“最好的”。考虑到您应用的其余部分是否有意义,只有您可以确定,因为我们只知道您在此处写的内容。
    猜你喜欢
    • 2023-03-30
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多