Handler 在Android中是一种消息处理机制。
new Handler(); 创建handler对象,常用在已经初始化了 Looper
的线程中调用这个构造函数(即非主线程),如果感觉不好理解,可以把Handler handler = new Handler() 理解为常用在Activity,Fragment,带有界面的地方,如果用在自定义View 或者其他工具类中,不带界面的地方就会报错,如果就是这个,很早之前自己写的一个,如下
处理方法在非主线程中使用这种无参数构造方法创建 Handler
之前,通常需要先调用 Looper.prepare()
初始化 Looper
,然后再调用 Looper.loop()
开始消息循环。
这种情况其实还可以使用 new Handler(getMainLooper())
new Handler(getMainLooper())
创建的 Handler
会绑定到当前应用的主线程(也称为UI线程)的 Looper。这意味着通过这个 Handler
发送的消息和运行的 Runnable
将会在主线程中执行,这对于更新UI组件或其他需要在主线程中进行的操作非常有用
getMainLooper()
的作用:
getMainLooper()
在 Android 系统中是一个方法,它属于 Looper
类,用于获取当前应用的主线程(也称为 UI 线程)的 Looper 对象。每个线程在Android中如果要处理消息循环(Message Loop),就需要关联一个Looper对象,而主线程在系统启动时已经默认创建并初始化了一个Looper。
总体而言:
new Handler(getMainLooper())
:确保 Handler
在主线程的消息队列中处理消息。
当在非主线程环境下需要确保操作能在主线程(UI线程)执行时,应明确使用 new Handler(getMainLooper())
,
new Handler()
:如果没有明确指定Looper,那么会默认关联到当前线程的Looper,因此若在非主线程且未准备Looper的情况下使用,将会引发异常。
就是在主线中,知道上下文,(做Android APP开发的很容易理解,就是activity,Fragment界面,一般长使用这个)