`
javapolo
  • 浏览: 131559 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

android 笔记handler

 
阅读更多

 

       最近两天在学习android异步处理机制handler,以下是个人对handler的一个自我认识

       谈到handler机制,首先我以一幅图来谈谈我对android handler 的认识

 handler    

A Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue. Each Handler instance is associated with a single thread and that thread's message queue. When you create a new Handler, it is bound to the thread / message queue of the thread that is creating it -- from that point on, it will deliver messages and runnables to that message queue and execute them as they come out of the message queue.

 

以上的一段话说明了handler的一个运行原理,实际上,通过实验,每一个应用程序启动过后,系统会自动为它创建相应的looper对象,looper对象生成messagequeue对象,并将该应用程序所有的activity与messagequeue对象进行相应的绑定,而handler则是与某个生成它的线程绑到一起的,一般是ui线程,handler通过发送message对象到messagequeue对象里面,并通过looper对象的不断循环,以对每个message对象进行相应的处理,以达到异步更新ui线程里面的一些控件。

 

 以下对运行机制的解释

疑问一:

 凭什么说该应用程序所有activity只有一个looper对象,一个messagequeue对象?

原因:其实这个问题可以通过实验验证,可以通过调用不同activity方法getMainLooper()对象,其实都是一个,再者messagequeue对象是由looper对象生成,所以当然一样且有一个。(looper对象由系统维护)

疑问二:

从messagequeue队列中出来的message为啥知道调用哪个handler呢?

 

    /**
     * User-defined message code so that the recipient can identify
     * what this message is about. Each {@link Handler} has its own name-space
     * for message codes, so you do not need to worry about yours conflicting
     * with other handlers.
     */
    public int what;

 

其实就是这个what,它对接受者进行唯一标识,每个message对象有它自己的命名空间,所以message对象调用handler不会产生冲突。

疑问三:

以上图中的thread与handler有联系吗?

我画的handler对象源于主线程,之所以开子线程是为了在进行一些长时间的操作,如下载,网络操作等,避免出现ANR现象,同时又可以保证实时对ui线程进行控件更新操作(如进度条更新)。所以两者没有必然的联系,看情况而定。

补充:

其实新开的子线程默认是没有looper对象的,所以也就不存在相应的messagequeue对象,如果子线程里面有自己生成的handler对象,那么只有当它里面存在looper对象时,才可进行消息的接收

 

 

 

 

 

 

 

 

 

 

  • 大小: 44.3 KB
分享到:
评论
1 楼 amanda7783 2014-10-10  

相关推荐

    android_handler学习笔记

    Handler在android里负责发送和处理消息。它的主要用途有(或者是干什么的):  1)执行计划任务,按计划(定时)发送消息或执行某个Runnanble(使用POST方法);  2)线程间通信,把从其他线程中发送来的消息放入消息...

    最新最全的Android开发笔记

    除此之外,笔记还涉及了Android的多线程处理,包括Handler、Looper、Message的使用,以及AsyncTask的介绍。这些内容对于优化应用性能和实现后台操作至关重要。 网络编程是现代应用不可或缺的一部分,笔记中详细讲述...

    android 很好的学习笔记

    【Android学习笔记详解】 在移动应用开发领域,Android操作系统占据着重要的地位,为开发者提供了丰富的平台和无限的可能性。"Android很好的学习笔记"是一份专为初学者设计的资源,旨在帮助那些想要踏入Android开发...

    Android开发笔记全集

    6. **多线程**:Android主线程不能执行耗时操作,所以需要使用AsyncTask、IntentService、Thread或Handler-Looper机制进行异步处理,保证用户体验。 7. **权限管理**:随着Android版本的升级,权限管理变得越来越...

    Android笔记

    【Android笔记】是一系列关于Android开发的个人学习记录,作者提到笔记内容可能并不全面,因为并非从一开始就系统性地整理。这些笔记涵盖了Android开发的多个关键领域,旨在帮助读者理解和掌握Android应用开发的核心...

    android 学习笔记(全全整理)

    4. **事件处理**:学习Android中的触摸事件、键盘事件以及各种控件的监听事件,如OnClickListener、OnCheckedChangeListener等,以及如何通过Handler和Runnable实现异步消息处理。 5. **数据存储**:了解SQLite...

    xamarin学习笔记A13(安卓Handler异步消息处理)

    本篇笔记主要聚焦于Xamarin中的Android Handler异步消息处理机制,这是Android UI线程与后台工作线程之间通信的关键技术。 一、Android线程模型 Android系统规定,所有的UI操作必须在主线程(也称为UI线程)中进行...

    Android开发教程笔记完全版 pdf

    由于主线程不允许执行耗时操作,因此Android引入了AsyncTask、IntentService、Handler/Looper机制以及现在推荐的协程(Coroutines)来实现后台任务。 十、权限管理 Android系统采用权限模型来保护用户数据安全。...

    android基础笔记

    Android基础笔记是对Android操作系统开发入门知识的系统整理。Android是一种基于Linux内核的开源移动设备操作系统,由Google主导开发并广泛应用于智能手机、平板电脑及智能电视等设备。这份笔记涵盖了Android开发的...

    Android基础笔记

    Android 基础笔记 Android 基础笔记是 Android 开发的入门知识点总结,涵盖了 Android 开发的基础知识点,从 Android 发展史到自定义 ContentProvider 的实现。 一、Android 发展史 Android 的发展史可以追溯到 ...

    Android开发笔记 Handler使用总结

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

    Android笔记.zip

    这份"Android笔记.zip"的压缩包很可能包含了一份详尽的Android开发者的学习指南。以下是一些关键的Android知识点的深入解析: 1. **Android架构**:Android系统基于Linux内核,分为应用程序层、应用程序框架层、...

    android 非常全培训笔记

    这份"android 非常全培训笔记"无疑是为开发者提供了一个宝贵的参考资料。它包含了从小实例到实际应用的各种实践,帮助初学者逐步深入理解Android系统的工作原理和开发技巧。下面我们将详细探讨其中可能涵盖的关键...

    Android学习笔记.pdf

    包括环境搭建教程、创建模拟器、新建helloworld程序、电话拨号器、软件部署到模拟器、短信发送器、线性布局、相对布局、日志、activity、Android进程线程及优先级、Android UI线程阻塞及优化、广播接受者、Service...

    android详细笔记

    这份“Android详细笔记”涵盖了从基础到进阶的各种知识点,旨在帮助读者深入理解Android开发技术。 一、Android系统架构 Android系统由五层结构组成:Linux内核、硬件抽象层、系统运行库、应用程序框架以及应用程序...

    超全android 教程 笔记

    Android教程笔记涵盖了大量的知识点,是学习Android开发的重要资源。以下是对这些笔记的详细解析: 1. **Android基础知识**:这是Android开发的起点,包括对Java语言的理解,因为Android应用程序主要用Java编写。...

    Android云笔记

    【Android云笔记】项目是一个专为初学者设计的实践教程,旨在帮助他们理解和掌握如何在Android平台上开发一款基于云同步的笔记应用。这个项目涵盖了Android应用程序开发的基础知识,包括UI设计、数据存储、网络通信...

    Android 系统知识总结+培训课程+笔记

    Android主线程负责UI更新,后台任务则需通过AsyncTask、IntentService、Thread或Handler/Looper来实现,避免阻塞UI,提高用户体验。 十、Android性能优化 了解内存泄漏检测、耗电优化、渲染性能分析等技巧,以及...

    android学习笔记之handler消息处理机制1

    在android中有一个规则:考虑到安全性,子线程不能动态的改变主线程中组件的属性值。 但为了执行一些耗时操作,往往会将它们放在子线程中,执行完毕要更新主线程中的UI,所以就有了handler消息处理机制。 handler就...

Global site tag (gtag.js) - Google Analytics