Handler主要由2个用途。
一:用于延迟执行;
二:用于子线程更新UI操作。
一:延迟执行;
延迟方法列举:
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
比如启动画面到主页面的转换,可以在oncreat()方法里面写如下代码:
new Handler().postDelayed(new Runnable() { @Override public void run() { startActivity(new Intent(SplashActivity.this, MainActivity.class)); finish(); } }, 2000);
二:子线程更新UI操作。
主要接受子线程发送的数据, 并用此数据配合主线程更新UI。
解释:当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件, 进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。 如果此时需要一个耗时的操作,例如: 联网读取数据, 或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会收到Android系统的一个错误提示 "强制关闭"。 这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,,Android主线程是线程不安全的, 也就是说,更新UI只能在主线程中更新,子线程中操作是危险的。 这个时候,Handler就出现了。,来解决这个复杂的问题 ,由于Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传递)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。
handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程)
以下代码实现在子线程中更新UI功能,如果直接在子线程中tv.setText("");那是会报错的
private Handler handler = new Handler(){ public void handleMessage(Message msg){ switch(msg.what){ case updateProgress: tv.setText("已经被更新"); break; } } }; //子线程中代码 handler.sendEmptyMessage(updateProgress);
Handler中分发消息的一些方法
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
附:
Handler类的post和sendMessage或者sendEmptyMessage方法都会使得代码在UI线程中执行,只是post方法执行的代码是Runnable.run()方法,而sendMessage方法执行的是Handler.handleMessage方法
最后一点要说的就是handler非常适合用来做一些一直进行着的UI操作,比如播放歌曲时的进度条显示。只需要在handleMessage方法中再次调用sendMessage方法就可以形成一个循环然后持续不断更新啦。
相关推荐
【Android开发笔记:Handler使用总结】 在Android应用开发中,Handler是处理线程间通信和UI更新的关键组件。当应用程序启动时,Android系统会默认创建一个主线程(UI线程),该线程主要负责管理界面中的UI控件,...
Android的Handler使用方法总结,不错的文档,跟大家分享分享
Android 中 Handler 的使用方法和总结 Handler 是 Android 中的一种非常重要的组件,它起到了十分重要的作用。Handler 主要用于异步消息的处理,当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回...
在Android开发中,`Handler...总结来说,`Handler`是Android中实现线程间通信的关键工具,通过`Message`和`Looper`协同工作,确保了UI线程的安全更新。理解其工作原理并合理使用,能有效提升应用程序的性能和用户体验。
分享一份teamcenter流程设计常用handler处理程序的使用总结及参数设置示例,希望能帮到大家!
总结来说,Handler是Android中实现线程间通信的重要机制,它在Fragment和Activity的交互中扮演着关键角色。正确理解和使用Handler能帮助开发者构建高效、稳定的Android应用程序。在实际开发中,还应结合其他通信方式...
总结来说,Handler是Android中处理多线程和UI同步的核心工具,理解其工作原理和使用方法对于开发高效、稳定的Android应用至关重要。通过熟练掌握Handler,开发者可以更好地控制应用的执行流程,确保UI响应性和性能。...
总结一下,`Handler`、`AsyncTask`和`Looper`在Android开发中起到了关键作用,它们帮助我们处理线程间的通信和异步任务。`Handler`用于发送和处理消息,`AsyncTask`简化了后台任务的执行,而`Looper`确保了消息的...
Title: Android Handler 深入理解与应用 在Android开发中,Handler机制是处理异步消息传递的关键组件,主要用于在不同的线程之间进行通信,尤其是主线程与工作线程之间的交互。当我们面临需要长时间运行的任务,如...
总结起来,一个Activity中的多个Handler提供了灵活的异步处理能力,每个Handler可以独立处理不同类型的事件。理解Handler、Looper和Message之间的关系对于优化Android应用的性能和避免潜在问题至关重要。在实际开发...
`Handler`用法的整理总结主要包括以下几个关键点: 1. **主线程与消息循环**: Android应用程序的主线程(UI线程)有一个内部的消息循环机制,由`Looper`类提供。当应用启动时,主线程会自动创建一个`Looper`实例...
以前刚接触的Handler的时候,感觉总是很困惑,对Handler原理也是一知半解,现在对Handler知识点总结一下,写了一个Demo,供参考。http://blog.csdn.net/yalinfendou博客中有详细介绍……
总结来说,Thread和Handler是Android中实现多线程和UI更新的核心工具。Thread用于执行后台任务,而Handler则提供了一种安全地在主线程中执行UI更新的方式,确保应用的响应性和稳定性。理解并熟练运用这两个概念,...
总结一下,Android的Handler、Runnable和Looper机制是多线程编程的关键工具,它们提供了异步处理和UI更新的能力。理解并熟练运用这三个组件,对于编写高效、流畅的Android应用至关重要。在实际开发中,根据业务需求...
总结起来,Handler是Android中进行线程间通信的重要工具,合理使用它可以有效地提升应用的性能和用户体验。在实际开发中,应结合使用Handler、Looper和Thread,以实现高效的多线程编程。在后续章节,我们将更深入地...
3. 使用Handler的sendMessage()或post()方法发送消息或者Runnable对象,消息会被添加到MessageQueue中。 4. 调用Looper.loop()开始消息循环,这个循环将持续到Looper.quit()被调用为止。 5. Looper从MessageQueue中...
总结来说,`Handler`是Android异步编程的关键工具,它使得开发者能够在不阻塞主线程的情况下,安全地进行UI更新和其他操作。理解并熟练运用`Handler`,对于提升Android应用的性能和用户体验至关重要。
总结,`Activity`中的多个`Handler`处理机制是Android应用程序中多线程通信的重要实践。通过合理设计和使用多个`Handler`,我们可以更灵活地组织业务逻辑,同时需要确保避免内存泄漏和正确处理线程安全问题。理解和...
总结一下,Android的日期类提供了处理日期和时间的能力,而`Handler`则提供了异步消息处理机制,使得我们可以在不阻塞UI线程的情况下执行耗时操作。理解和熟练运用这些工具,对于提高Android应用的性能和用户体验至...