Android更新进度条
来源:互联网 发布:windows系统安装u盘 编辑:程序博客网 时间:2024/05/17 02:36
问题: Android是不允许子线程更新UI界面的,子线程更新界面会出现异常,然而下面的例子非常让人苦恼,‘子线程’更新UI界面,并且没有发生异常。
@Override public void onClick(View arg0) { Log.d(TAG, "onClick " + Thread.currentThread().getName()); new Thread(new Runnable() { @Override public void run() { Log.d(TAG, "run " + Thread.currentThread().getName()); for(int i=0;i<=100;i ++) { try { mProgressBar.setProgress(i); Thread.sleep(1000); Log.d(TAG, "mProgressBar setProgress:" + i); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); }原因:在源码中ProgressBar中会调用到refreshProgress方法,源码如下
private synchronized void refreshProgress(int id, int progress, boolean fromUser) { if (mUiThreadId == Thread.currentThread().getId()) { doRefreshProgress(id, progress, fromUser, true); } else { if (mRefreshProgressRunnable == null) { mRefreshProgressRunnable = new RefreshProgressRunnable(); } final RefreshData rd = RefreshData.obtain(id, progress, fromUser); mRefreshData.add(rd); if (mAttached && !mRefreshIsPosted) { post(mRefreshProgressRunnable); mRefreshIsPosted = true; } } }
从中可以得知如果当前线程id与UI线程不相等,则post到UI线程中的handler中,从而使UI线程更新界面,而不是自己写的子线程更新界面.
0 0
- Android更新下载进度条
- Android更新下载进度条
- Android更新下载进度条
- Android更新进度条
- android 进度条更新
- 多线程实现Android更新进度条
- 多线程实现Android更新进度条
- Android Handler模拟进度条更新
- Android 进度条算法 更新进度条算法 long int
- android使用AsyncTask来实现更新进度条
- android下载单个文件时时更新进度条
- android AsyncTask异步下载并更新进度条
- Android初试--更新进度条(ProgressBar)1
- Android初试--更新进度条(ProgressBar)2
- android listview item 定时器更新进度条
- Android更新带进度条的通知栏
- android 自定义进度条下载apk并更新
- 更新进度条
- MD5 32位加密
- SQLite简介
- DC---DeviceContext 中文翻译为设备上下文或者设备描述表
- Web安全之XSS跨站脚本攻击
- eclipse时间,log时间,控制台打印时间
- Android更新进度条
- 印花税下调,今天股市上涨概率很大
- 记事——2015/8/26
- mui
- linux socket编程示例——UDP
- VC连接SQLite3的方法(MFC封装类)
- UITableViewDataSource
- Gephi——如何在geolayout布局下加上地图背景
- VC 编译 设置 代码合集