实时更新UI
来源:互联网 发布:java分层命名规范 编辑:程序博客网 时间:2024/06/07 18:02
众所周知,Android子线程无法修改UI界面,但是一些耗时操作又必须放到子线程中进行,所以有一个概念叫做“异步更新UI”,什么意思呢?
耗时操作放在子线程去做,当耗时操作做完之后我把结果传给主线程,然后让主线程修改UI界面
关于如何进行异步更新,下面这篇博客写的很详细也很好
android进行异步更新UI的四种方式
在我们项目中,有时候会遇到这种需求:异步实时更新UI
异步更新: 一般是指开线程处理耗时操作然后返回的结果交给主线程修改UI界面,UI界面只变化一次异步实时更新:不停地执行异步更新操作,UI也在不停地变化,因为要实时更新数据
举个“栗子”
1 歌曲显示当前播放时间,随着音频播放时刻变化,显示时间一直在变化2 天气预报,更新每小时或者每一分钟的状态
如图所示
handler是进行异步操作的核心类,我们在项目中一般是用sendMessage或者post方法来执行异步更新(post是sendMessage的变种),使用post更加简单且方便
public class MainActivity extends AppCompatActivity { TextView tv; int i; private Handler handler=new Handler(); private Runnable r=new Runnable() { @Override public void run() { i++; updateUI(i+""); if(i<10){ handler.postDelayed(r, 1000);//1.1 }else { handler.removeCallbacks(r);//1.2 } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.fram); handler.postDelayed(r, 1000);//1.3 } private void updateUI(String str) { tv.setText(str); }}
handler.postDelayed是指延时一段时间再执行回调r,而r中又要执行postDelayed,其实这就是一个递归,不停地调用自身,直至达到条件限制(i<10)然后执行完毕
1.2 这一行表示移除回调r,移除之后就不再继续执行回调了1.1和1.3里面的1000表示延时的时间,单位是毫秒,二者的延时时间可以不一样,1.3延时表示从原有的UI到第一次更新UI的间隔时间,1.1延时表示的是每次更新UI间隔的时间,1.3最好不要设置成0,因为设置成0的话就不能看到原始的UI,感受不到UI界面的更新了。
关于Runnable
The Runnable interface should be implemented by any class whose instances are intended to be executed by a thread.
这是一个只有一个run方法的接口,任何想通过线程执行实例化的类都必须实现这个接口
阅读全文
0 0
- 实时更新UI
- Android使用Handler实时更新UI
- Android 获取时间实时更新UI
- C#多线程更新UI。实时显示工作进程
- ios开发,将子线程获取的数据实时更新到UI
- ios开发,将子线程获取的数据实时更新到UI
- ios开发,将子线程获取的数据实时更新到UI
- ios开发,将子线程获取的数据实时更新到UI
- iOS开发,将子线程获取的数据实时更新到UI
- 更新ui
- 更新ui
- 更新UI
- lucene的实时更新
- 时间实时更新
- E文(实时更新)
- 实时更新异地数据库
- 实时更新 (网络数据)
- datagridview Checkbox实时更新
- Codeforces Round #370 (Div. 2) C. Memory and De-Evolution(逆向思维)
- selenium+python自动化测试(四)--鼠标和键盘事件
- irqbalance对台式机/笔记本是否有帮助?
- 算法(一)最大子数组问题
- JS学习路线
- 实时更新UI
- 通俗理解卷积神经网络
- Java方法重载
- C中常用的字符、字符串处理函数
- API学习StringBuffer
- git-osc-android客户端之源码分析4
- maven之学习之路(三)
- MapReduce:详解Shuffle过程
- 服务器磁盘满了,mysql写入数据报错table xx is full