`

Handler的使用总结

阅读更多

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使用总结】 在Android应用开发中,Handler是处理线程间通信和UI更新的关键组件。当应用程序启动时,Android系统会默认创建一个主线程(UI线程),该线程主要负责管理界面中的UI控件,...

    Android的Handler使用方法总结

    Android的Handler使用方法总结,不错的文档,跟大家分享分享

    android中Handler的使用方法和总结

    Android 中 Handler 的使用方法和总结 Handler 是 Android 中的一种非常重要的组件,它起到了十分重要的作用。Handler 主要用于异步消息的处理,当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回...

    Handler的介绍和使用方法

    在Android开发中,`Handler...总结来说,`Handler`是Android中实现线程间通信的关键工具,通过`Message`和`Looper`协同工作,确保了UI线程的安全更新。理解其工作原理并合理使用,能有效提升应用程序的性能和用户体验。

    teamcenter流程设计常用handler处理程序的使用总结及设置示例

    分享一份teamcenter流程设计常用handler处理程序的使用总结及参数设置示例,希望能帮到大家!

    Fragment与Activity使用Handler进行交互

    总结来说,Handler是Android中实现线程间通信的重要机制,它在Fragment和Activity的交互中扮演着关键角色。正确理解和使用Handler能帮助开发者构建高效、稳定的Android应用程序。在实际开发中,还应结合其他通信方式...

    Android中handler的使用

    总结来说,Handler是Android中处理多线程和UI同步的核心工具,理解其工作原理和使用方法对于开发高效、稳定的Android应用至关重要。通过熟练掌握Handler,开发者可以更好地控制应用的执行流程,确保UI响应性和性能。...

    Handler与AsyncTask使用示例

    总结一下,`Handler`、`AsyncTask`和`Looper`在Android开发中起到了关键作用,它们帮助我们处理线程间的通信和异步任务。`Handler`用于发送和处理消息,`AsyncTask`简化了后台任务的执行,而`Looper`确保了消息的...

    android_Handler整理总结

    Title: Android Handler 深入理解与应用 在Android开发中,Handler机制是处理异步消息传递的关键组件,主要用于在不同的线程之间进行通信,尤其是主线程与工作线程之间的交互。当我们面临需要长时间运行的任务,如...

    一个activity中多个handler和消息的处理过程

    总结起来,一个Activity中的多个Handler提供了灵活的异步处理能力,每个Handler可以独立处理不同类型的事件。理解Handler、Looper和Message之间的关系对于优化Android应用的性能和避免潜在问题至关重要。在实际开发...

    Handler用法整理总结

    `Handler`用法的整理总结主要包括以下几个关键点: 1. **主线程与消息循环**: Android应用程序的主线程(UI线程)有一个内部的消息循环机制,由`Looper`类提供。当应用启动时,主线程会自动创建一个`Looper`实例...

    Android Handler Message一些知识总结的Demo

    以前刚接触的Handler的时候,感觉总是很困惑,对Handler原理也是一知半解,现在对Handler知识点总结一下,写了一个Demo,供参考。http://blog.csdn.net/yalinfendou博客中有详细介绍……

    关于Thread和Handler的使用(一)

    总结来说,Thread和Handler是Android中实现多线程和UI更新的核心工具。Thread用于执行后台任务,而Handler则提供了一种安全地在主线程中执行UI更新的方式,确保应用的响应性和稳定性。理解并熟练运用这两个概念,...

    android handler runnable使用实例(关键是内部run中停止)

    总结一下,Android的Handler、Runnable和Looper机制是多线程编程的关键工具,它们提供了异步处理和UI更新的能力。理解并熟练运用这三个组件,对于编写高效、流畅的Android应用至关重要。在实际开发中,根据业务需求...

    Android_Handler详解(一)

    总结起来,Handler是Android中进行线程间通信的重要工具,合理使用它可以有效地提升应用的性能和用户体验。在实际开发中,应结合使用Handler、Looper和Thread,以实现高效的多线程编程。在后续章节,我们将更深入地...

    handler与looper及messagequeue的简单总结

    3. 使用Handler的sendMessage()或post()方法发送消息或者Runnable对象,消息会被添加到MessageQueue中。 4. 调用Looper.loop()开始消息循环,这个循环将持续到Looper.quit()被调用为止。 5. Looper从MessageQueue中...

    安卓Handler的Demo

    总结来说,`Handler`是Android异步编程的关键工具,它使得开发者能够在不阻塞主线程的情况下,安全地进行UI更新和其他操作。理解并熟练运用`Handler`,对于提升Android应用的性能和用户体验至关重要。

    Activity中的多个Handler处理机制

    总结,`Activity`中的多个`Handler`处理机制是Android应用程序中多线程通信的重要实践。通过合理设计和使用多个`Handler`,我们可以更灵活地组织业务逻辑,同时需要确保避免内存泄漏和正确处理线程安全问题。理解和...

    Android的日期类及Handler的使用

    总结一下,Android的日期类提供了处理日期和时间的能力,而`Handler`则提供了异步消息处理机制,使得我们可以在不阻塞UI线程的情况下执行耗时操作。理解和熟练运用这些工具,对于提高Android应用的性能和用户体验至...

Global site tag (gtag.js) - Google Analytics