android 橘子汁 在子线程中更新主线程UI 困扰

来源:互联网 发布:手机淘宝店招尺寸2017 编辑:程序博客网 时间:2024/05/23 11:35

        问题描述:要做这么一个功能,从网上获取一些数据,数据内容未获取到前显示一张图片(等待图片,但不是progressbar),一旦数据获取成功就通知主UI,使其为listView

        这两天都在搞这个问题,用尽线程无数,始终无法解决诸如线程安全和4.0网络线程问题。

        最开始,我将网络线程与UI主线程放在一起,可总是报android.os.NetworkOnMainThreadException 错误,更别提更新UI了!貌似这是因为android高版本为了优化类似主UI进程长时间等待所做的改变。在8以下的版本中都没有这样的问题。

        后来,我将网络线程独立出来。启用一个网络线程用于控制网络数据获取和获取成功后的UI更新。可是问题又来了:新启动的网络线程中根本无法操作主线程里的UI。连context都传不进来。会报类似这样的错误android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views.

 

        终于,为了解决这些问题,我最终还是回归了android系统中的handler。使用handler来解决这个问题就简单多了。

       步骤:

                1.开始onCreate中设置等待UI

                2.启动网络连接获取数据线程,此线程中将获得的数据赋值给主类全局数据参数,判断是否获取数据成功,成功则通知ui更新(向主UI线程的handler对象send一个msg)

                3.在主UI线程中监视handler的msg,若发现msg被更改为预设情况,则更新ui

 

奉上代码:

原创粉丝点击