首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

非UI线程可以往刷新UI吗(timertask调用progressbar的setProgress的特例)

2012-11-06 
非UI线程可以去刷新UI吗(timertask调用progressbar的setProgress的特例)今天我qq群里面的大漠同学问了这样

非UI线程可以去刷新UI吗(timertask调用progressbar的setProgress的特例)

今天我qq群里面的大漠同学问了这样一个问题,先看看他粘贴的源代码如下:

private synchronized void refreshProgress(int id, int progress, boolean fromTouch) {        if (mUiThreadId == Thread.currentThread().getId()) {            doRefreshProgress(id, progress, fromTouch);        } else {            RefreshProgressRunnable r;            if (mRefreshProgressRunnable != null) {                // Use cached RefreshProgressRunnable if available                r = mRefreshProgressRunnable;                // Uncache it                mRefreshProgressRunnable = null;                r.setup(id, progress, fromTouch);            } else {                // Make a new one                r = new RefreshProgressRunnable(id, progress, fromTouch);            }            post(r);        }    }

从源代码里面我们可以看到当当前刷新的线程不是主线程的时候,ProgressBar会去自动new一个刷新的线程,所以这和刷新的时候在不在主线程里面调用setProgress方法关系不大,从表面上看似乎是在非UI线程里面去修改了主线程的控件,而实际上并非这样。



6楼a215318036昨天 17:18
哦哦鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅
5楼soso7778昨天 15:20
这个可以好好学习一下
4楼knighttools昨天 14:10
Joker前来围观。
3楼lxjiang2632昨天 13:09
刚哥V5
2楼snwrking昨天 13:03
以前也对AsyncTask中的onPostExecute()能刷新UI感到奇怪,其实也类似楼主的问题了
1楼svrsimon昨天 12:48
沈阳斌子 来围观

热点排行