子线程中更新UI操作
来源:互联网 发布:情趣内衣淘宝卖家秀 编辑:程序博客网 时间:2024/09/21 08:47
1.使用Handler+Message的机制:
使用步骤:
主线程: Handler handler=new Handler(){ public void handleMessage(Message msg){ //接受数据 // 更新ui } };子线程:new Thread(){ public void run(){ Message msg=Message.obtain(); msg.obj=数据; handler.sendMessage(msg); //handleMessage(); } }.start();
主程序中:
Handler handler=new Handler(){ public void handleMessage(android.os.Message msg) { String content=(String)msg.obj; tv.setText(content); };};
MainActivity的oncreat方法中:
//1.handler实现 new Thread(){ public void run() { SystemClock.sleep(1000); //设置线程睡眠 Message msg=Message.obtain(); msg.obj="我就更新ui线程中的控件"; handler.sendMessage(msg); };}.start();
2.使用runOnUIThread()方法:封装了Handler+Message
使用步骤:
new Thread(){ public void run(){ runOnUiThread( new Runnable(){ public void run(){ // 更新ui } } ); } }.start();
//2.使用runOnUiThread
new Thread(){ public void run() { SystemClock.sleep(1000); //runOnUiThread运行在主线程中的,如果当前线程是主线程就运行,否则加入主线程队列 runOnUiThread(new Runnable() { @Override public void run() { tv.setText("使用runOnUiThread更新ui"); } }); }; }.start();
3.使用延迟机制postDelayed实现在子线程中更新主线程的UI:第二个参数是延迟执行的时间(毫秒值)
使用场景:启动界面+主程序在一个方法中:(先显示布局文件里面的text内容,延迟后显示这里的内容)
使用步骤:
new Handler().postDelayed( new Runnable(){ public void run(){ // 更新ui } },2000);
//3.使用延迟机制实现在子线程中更新主线程ui,第二个参数是延迟执行的时间
new Handler().postDelayed(new Runnable() {
@Override public void run() { tv.setText("使用延迟机制实现在子线程中更新主线程ui"); } }, 2000);
4.定时器timer:还需要使用runOnuiThread或是handler+message的机制
参数:一个long:和前几个没区别
两个long:第一个参数是执行之前的延迟时间,第二个参数是每个多长时间进行一次循环执行
使用场景:页面之间的链接执行操作
问题:退出之后依然会执行
解决:取消操作:cancel();
使用步骤:
Timer timer=new Timer();TimerTask task=new TimerTask(){ public void run(){ runOnUiThread(new Runnable(){ public void run(){ // 更新ui } }) }};//timer.schedule(task,2000); timer.schedule(task,2000,1000); //4.定时器timer的应用 timer = new Timer(); task = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { System.out.println("执行了一次又一次"); tv.setText("执行任务,不回家睡觉!"); } }); } }; //timer.schedule(task, 2000); //两秒钟后执行task timer.schedule(task, 3000,1000); //三秒钟后执行task,每间隔一秒钟执行一次} @Override//用来解决当退出任务时,在后台自己运行的问题:取消任务protected void onDestroy() { super.onDestroy(); task.cancel(); //取消任务 timer.cancel();//取消定时器}
0 0
- 子线程中更新UI操作
- 子线程中更新UI
- android-----在子线程中更新UI操作的方法
- Android 子线程操作更新UI方法
- Android 子线程中操作UI线程
- .NET中 后台子线程 更新UI
- 子线程中更新ui界面
- 在子线程中更新UI
- 子线程中无法刷新更新 UI
- 在子线程中如何更新ui
- 在子线程中更新UI
- C#子线程中更新ui
- Android子线程中更新UI
- 在子线程中更新UI
- 在子线程中更新UI
- 子线程更新UI
- 子线程更新UI
- 子线程更新ui
- BZOJ 2120 带修莫队
- [转]PHP7内核知识
- JSONP跨域的工作原理
- LeetCode-70. Climbing Stairs
- 有关递归的问题
- 子线程中更新UI操作
- html xhtml xml
- 亲测解决小问题的相关网站
- 2017.2.25第二次測試總結
- 1028. List Sorting (25)
- AndroidStudio查看预览的小技巧
- mybatis3--延迟加载,缓存
- 0001 零基础的小白能学会编程吗
- STL容器 list、vector、map、set 使用的陷阱